宋亞玲吳劍國(guó)林勇
(1.浙江工業(yè)大學(xué)建筑工程學(xué)院 杭州 310032;2.浙江省船檢局 杭州 310032)
基于熱點(diǎn)應(yīng)力法的船舶結(jié)構(gòu)疲勞分析系統(tǒng)開發(fā)
宋亞玲1吳劍國(guó)1林勇2
(1.浙江工業(yè)大學(xué)建筑工程學(xué)院 杭州 310032;2.浙江省船檢局 杭州 310032)
船體結(jié)構(gòu)的熱點(diǎn)應(yīng)力疲勞分析過(guò)程比較復(fù)雜,按照CCS《船體結(jié)構(gòu)疲勞強(qiáng)度評(píng)估指南》實(shí)施起來(lái)比較困難。因此采用MSC.Patran二次開發(fā)語(yǔ)言PCL進(jìn)行編程,開發(fā)船體結(jié)構(gòu)熱點(diǎn)應(yīng)力疲勞分析系統(tǒng),實(shí)現(xiàn)了扣除腐蝕余量、荷載計(jì)算、施加疲勞荷載、提取結(jié)果及分析的自動(dòng)化,大大提高了船體結(jié)構(gòu)熱點(diǎn)應(yīng)力疲勞分析的效率。
船體結(jié)構(gòu);熱點(diǎn)應(yīng)力;PCL語(yǔ)言;疲勞分析
疲勞破壞是船舶結(jié)構(gòu)的主要破壞形式之一,中國(guó)船級(jí)社(CCS)《船體結(jié)構(gòu)疲勞強(qiáng)度評(píng)估指南(2007)》(下文簡(jiǎn)稱為:CCS指南)規(guī)定復(fù)雜結(jié)構(gòu)的疲勞強(qiáng)度評(píng)估應(yīng)該用熱點(diǎn)應(yīng)力方法[1]。疲勞熱點(diǎn)應(yīng)力需要用細(xì)化有限元直接計(jì)算,過(guò)程比較復(fù)雜。熱點(diǎn)應(yīng)力的疲勞分析主要為:有限元建模并細(xì)化、扣除腐蝕余量、疲勞分析載荷計(jì)算、疲勞載荷自動(dòng)加載,熱點(diǎn)應(yīng)力計(jì)算等五步,實(shí)施起來(lái)比較困難。
本文基于CCS指南中的熱點(diǎn)應(yīng)力方法,采用PCL二次開發(fā)熱點(diǎn)應(yīng)力的疲勞分析系統(tǒng),大大提高了船體結(jié)構(gòu)疲勞分析的效率。
PCL(Patran Command language)是MSC.Patran系統(tǒng)中不可缺的程序設(shè)計(jì)語(yǔ)言。它提供了大量的函數(shù),具有一般高級(jí)語(yǔ)言具有的大部分?jǐn)?shù)據(jù)類型。它類似C語(yǔ)言和Fortran語(yǔ)言,尤其適合CAE應(yīng)用程序的開發(fā)與應(yīng)用[2-3]。其擁有豐富的表格及菜單庫(kù),可供開發(fā)用戶圖形界面、遞歸的子程序,以及函數(shù)調(diào)用、二進(jìn)制及文本文件讀寫等功能。由于Patran程序啟動(dòng)時(shí),會(huì)自動(dòng)搜尋“init.pcl”文件。因此,用戶可以將編寫的“*pcl”文件(如model.pcl)放到“init.pcl”同樣的根目錄下,然后在“init.pcl”文件中加入“!!INPUT*.pcl(model.pcl)”,便可實(shí)現(xiàn)每次啟動(dòng)Patran程序即調(diào)用已編寫的程序。
CCS指南對(duì)疲勞校核部位有明確規(guī)定,也要求計(jì)算點(diǎn)附近的有限元網(wǎng)格尺度不得大于受力構(gòu)件板厚t,從疲勞熱點(diǎn)位置向外所有方向延伸范圍不小于10t。熱點(diǎn)處采用4節(jié)點(diǎn)或8節(jié)點(diǎn)殼元,避免使用三角形單元。將粗網(wǎng)格有限元模型進(jìn)行細(xì)化便可利用CCS開發(fā)的“CCS_Tools”軟件中“節(jié)點(diǎn)細(xì)化”工具,故此處不作詳述。
細(xì)化有限元模型應(yīng)將實(shí)際結(jié)構(gòu)尺寸扣除腐蝕余量。即當(dāng)厚度t≤10mm時(shí),腐蝕余量tk為0.75mm,否則腐蝕余量tk取0.05t+0.25和1.6之間的最小值??鄢g余量較繁瑣,因?yàn)樗婕暗降乃袉卧陌搴窈土汉穸染枰蹨p。因此利用PCL語(yǔ)言可以很方便解決此問(wèn)題。首先編寫扣除腐蝕余量界面(如圖1所示),然后獲取板厚和梁厚的屬性列表,再點(diǎn)擊所需要修改屬性項(xiàng),并單擊“應(yīng)用”按鈕,會(huì)激發(fā)“apply_cb”函數(shù)。在“apply_cb”函數(shù)中,根據(jù)用戶所選項(xiàng),獲取其屬性值,繼而再調(diào)用“reduce_thickness”函數(shù),根據(jù)所獲取的板厚或梁厚值(tk)并按上述規(guī)則進(jìn)行腐蝕余量的扣除。
此程序最大的優(yōu)點(diǎn)是將所有單元所定義的屬性都放在一個(gè)列表中,通過(guò)點(diǎn)擊屬性名稱就可以實(shí)現(xiàn)板厚度或梁厚度的修改,有效提高了工作效率。其核心代碼如下[4-5]:
class deduction_corrosion_allowance
/*定義類名為“deduction_corrosion_allowance”*/classwide widget form,listbox_id1,ok_bt,ca_bt
/*定義在整個(gè)類的范圍中使用的變量*/
function init()/*函數(shù)初始化*/
圖1 扣除腐蝕余量界面
integer i_count,num_elems,iv_rid(VIRTUAL),
i_return_value,word_ids(8),num_words
string sv_name[64](VIRTUAL)
/*變量聲明,整數(shù)和字符串?dāng)?shù)*/
form=ui_form_create(″″,1.0,1.0,″UL″,2.8,5.5,″扣除腐蝕余量″,″″)
/*定義form界面,并作為其他變量的母體*/
ui_separator_create(form,″″,0.0,0.7,3.0,TRUE)
/*定義分割符*/
listbox_id1=ui_listbox_create(form,″″,0.2,1,2.6,22,″屬性列表″,″EXTEND″,false)
/*定義屬性下拉列表*/
ok_bt=ui_button_create(form,″apply_cb″,0.3,5.0,1.0,0.0,″應(yīng)用″,false,false)/*點(diǎn)擊“應(yīng)用”按鈕,則會(huì)產(chǎn)生響應(yīng)事件(Event)即調(diào)用apply_cb函數(shù)*/
ca_bt=ui_button_create(form,″cancel_cb″,1.8,5.0,1.0,0.0,″取消″,true,false)
/*點(diǎn)擊“取消”按鈕,則調(diào)用cancel_cb函數(shù)*/
db_count_region_ids(i_count)
/*獲得已定義的單元屬性域個(gè)數(shù)*/
db_get_region_ids_and_names(i_count,iv_rid,sv_name)
/*獲得已定義的單元屬性域號(hào)和名稱*/
db_count_props(iv_rid(i),num_words)
/*通過(guò)單元屬性域號(hào)獲得其屬性代碼“word”數(shù)*/
db_get_props_by_region(num_words,iv_rid(i),word_ids)
/*獲得屬性代碼號(hào)即“word_ids”*/
db_count_elements_in_region(iv_rid(i),num_elems)
/*獲得所定義屬性的單元個(gè)數(shù)*/
if(num_elems!=0)then
/*通過(guò)判斷num_elems不為0,從而創(chuàng)建本模型所有單元的屬性列表*/
db_get_prop_value(iv_rid(i),word_ids(2),
material_id,data_type,integer_val,real_values,
character_val,coord_id,node_id,field_id)
/*獲得具體屬性值real_values*/
end if
ui_listbox_items_create(listbox_id1,sv_wantname,
sv_wantname,select_number,wid_array)
/*創(chuàng)建下拉列表*/
end function/*PCL函數(shù)由關(guān)鍵字function開始,end function結(jié)束*/
function display()
/*顯示deduction_corrosion_allowance界面*/
ui_form_display
(″deduction_corrosion_allowance″)
end function
function apply_cb()
/*點(diǎn)擊“應(yīng)用”按鈕,調(diào)用apply_cb函數(shù)*/
integer pro_number
string pro_items[64](virtual)
/*定義pro_items具體維數(shù)未定*/
ui_wid_get(listbox_id1,″VALUE″,pro_items)
/*獲取在屬性列表中所選擇項(xiàng)目數(shù)*/
sys_allocate_array(pro_items,1,pro_number)
/*根據(jù)選擇項(xiàng),定義pro_items維數(shù)*/
ui_wid_get(listbox_id1,″VALUE″,pro_items)
/*獲取在屬性列表中所選擇項(xiàng)的名*/
reduce_thickness(pro_number,pro_items)
/*調(diào)用腐蝕余量扣除函數(shù)*/
end function
function cancel_cb()
/*點(diǎn)擊“取消”按鈕,調(diào)用cancel_cb函數(shù)*/
ui_form_hide(″deduction_corrosion_allowance″)
/*隱藏deduction_corrosion_allowance界面*/
end function
end class
/*類由class開始,end class結(jié)束類*/
function reduce_thickness(pro_number,pro_items)
if(num_words==2)then/*判斷為板厚*/
elementprops_modify()
else if(num_words!=2)then/*判斷為梁厚*/
bl_get_std_beam_section_data(id,ndim,data_types,rvalues,field_ids)/*獲取梁參數(shù)rvalues*/
db_get_beam_section(id,section_shape,section_name,num_dims,mode)
/*得到梁是如何形狀section_shape,有矩形、T形、L形等等*/
if(section_shape==″bar″)then/*梁為矩形時(shí)*/
beam_section_modify(section_name,section_name,
section_shape,beambar_data)
/*梁參數(shù)修改函數(shù)*/
else if(section_shape==″L″)then
/*梁為L(zhǎng)形時(shí)*/
beam_section_modify(section_name,section_name,section_shape,beamL_data)
else if(section_shape==″T″)then
/*梁為T形時(shí)*/
beam_section_modify(section_name,section_name,section_shape,beamT_data)
end if
end if
end function
CCS指南指出,直接計(jì)算疲勞強(qiáng)度應(yīng)力時(shí),應(yīng)包含滿載和壓載計(jì)算工況:
(1)滿載或壓載下總體垂向波浪彎矩范圍;
(2)滿載或壓載下總體水平波浪彎矩范圍;
(3)對(duì)應(yīng)滿載或壓載工況的外部水動(dòng)壓力范圍;
(4)對(duì)應(yīng)滿載或壓載工況的內(nèi)部貨物動(dòng)壓力范圍。
這四種疲勞載荷的計(jì)算主要與船體的一些參數(shù)有關(guān),故利用PCL編制荷載計(jì)算界面(如下頁(yè)圖2所示)。在“指定文件名”選項(xiàng)處輸入載荷文件名,則可以形成“*.out”文本文件,而且自動(dòng)施加位移約束、集中彎矩。其核心程序代碼如下:
box1=ui_databox_create(form,″″,0.8,0.5,0,1.5,″船長(zhǎng)L(m)″,170,TRUE,″REAL″,1)/*在母體form中創(chuàng)建輸入表,其他按鈕創(chuàng)建也類似*/ui_wid_get(box2,″VALUE″,data2)/*獲得databox中的值*/
圖2 載荷計(jì)算界面
獲得疲勞載荷參數(shù)后,按照CCS指南第3章的方法進(jìn)行疲勞載荷計(jì)算。此時(shí)僅涉及簡(jiǎn)單的數(shù)學(xué)運(yùn)算,故不贅述。將上述所計(jì)算得到疲勞載荷寫入“*.out”文本文件,并存入“d:\pljs”文件夾中,以便載荷施加。所用到核心代碼如下:
path=″d:\pljs″,定義荷載文件存盤路徑
ui_wid_get(file_dbox,″VALUE″,file_name)
/*獲得輸入文件名*/
file_create_directory(path,7*64+7*8+7)
/*在根目錄中創(chuàng)建名為pljs文件夾*/
file_build_fname(path,file_name,″out″,″NOV″,filename)/*pljs文件夾創(chuàng)建*.out文件*/
text_open(filename,″NOWA″,0,0,channel)
/*打開*.out文件,并對(duì)其進(jìn)行編寫*/
text_write_string(channel,″垂向波浪彎矩范圍″)
/*一行行寫,并寫“垂向波浪彎矩范圍”*/
text_write_string(channel,str_from_real(Mw))
/*將Mw實(shí)數(shù)轉(zhuǎn)換成字符數(shù)并寫入*/
疲勞強(qiáng)度分析主要涉及到8種荷載施加,比較復(fù)雜。本文以PCL進(jìn)行二次開發(fā),通過(guò)點(diǎn)擊組名,對(duì)應(yīng)需加荷載場(chǎng)名、荷載名,從而實(shí)現(xiàn)載荷自動(dòng)加載。如圖3所示。
圖3 自動(dòng)加載界面
第一次用MSC.Patran建立有限元模型必須規(guī)范化,特別是組名、場(chǎng)名、荷載名要一一對(duì)應(yīng)。這樣以后建立有限元模型時(shí),就可借用之前的模型文件,而只需刪除模型的幾何有限元單元,最后再利用此加載程序?qū)崿F(xiàn)快速加載。
此加載程序最核心的代碼如下:
db_get_group_name(獲得組名),db_get_group_id(獲得組的id),db_get_all_field_names(獲得場(chǎng)名),db_get_lbc_id_for_type(獲得荷載名),ui_listbox_items_create來(lái)實(shí)現(xiàn)組列表、場(chǎng)列表、荷載列表的創(chuàng)建;然后,通過(guò)db_count_elems_in_group(組里單元數(shù)目),db_get_elem_ids_in_group(組里單元號(hào)),loadsbcs_create2(加載函數(shù))實(shí)現(xiàn)荷載自動(dòng)加載。
船級(jí)社推薦兩點(diǎn)線性外推法,且為單元表面應(yīng)力,其公式如下:
式中:t為板厚(mm);
σt/2為距焊趾t/2處的應(yīng)力(N/mm2);
σ3t/2為距焊趾3t/2處的應(yīng)力(N/mm2)。
利用PCL編制熱點(diǎn)應(yīng)力疲勞分析計(jì)算程序時(shí),主要分兩步:一是各應(yīng)力范圍分量應(yīng)力σh提取并計(jì)算;二是應(yīng)力范圍合成并寫入“*.out”文件中,在其主界面“熱點(diǎn)名稱”中輸入所需要疲勞校核部位,單擊“熱點(diǎn)應(yīng)力計(jì)算”按鈕,激活并產(chǎn)生callback,展開熱點(diǎn)應(yīng)力計(jì)算子界面。如圖4所示。
圖4 熱點(diǎn)應(yīng)力計(jì)算界面
圖4上部分界面所涉及到的程序代碼如下:form_id=ui_form_create(″″,1.0,1.0,″UL″,2.8,6.5,″許用應(yīng)力插值″,″″)
select_frame1=ui_selectframe_create(form_id,″″,0.1,0.2,2.6,1.0,″Auto Execute″,TRUE)
data_box=ui_selectdatabox_create(select_frame1,″″,0.2,0.3,1.0,2.0,″定義的熱點(diǎn)″,
″″,TRUE,″NODE″,″select node filter″)
/*創(chuàng)建定義熱點(diǎn)選擇框,此處只能選擇node*/
此目的是獲取所要進(jìn)行疲勞分析計(jì)算部位處節(jié)點(diǎn)的坐標(biāo)。通過(guò)由圖2所獲得的模型起點(diǎn)的坐標(biāo)和輸入的“模型起點(diǎn)距尾垂線的距離”,從而計(jì)算出疲勞校核計(jì)算點(diǎn)距尾垂線的距離X、距縱中剖面的距離Y、距基線的距離Z,繼而計(jì)算得出Se(海水動(dòng)壓力引起的局部應(yīng)力范圍)與Si(艙內(nèi)貨物壓力引起的局部應(yīng)力范圍)之間的平均相關(guān)系ρ。
sort_sw1=ui_switch_create(form_id,″″,0.5,2.0,2,″″,TRUE)/*創(chuàng)建滿載和壓載選擇項(xiàng)*/
創(chuàng)建圖4下部分界面所涉及程序代碼如下所示:
wid_id1=ui_item_create(sort_sw1,″1″,″滿載″,F(xiàn)ALSE)
ui_wid_set(wid_id1,″VALUE″,TRUE)
ui_item_create(sort_sw1,″2″,″壓載″,F(xiàn)ALSE)
select_frame2=ui_selectframe_create(form_id,″″,0.1,2.7,2.6,1.3,″Auto Execute″,TRUE)
data_box1=ui_selectdatabox_create(select_frame2,″″,0.2,0.1,1.0,2.0,″0.5t″,″″,TRUE,″ELEM2D″,
″prompt″)/*創(chuàng)建選擇板殼單元選擇框,0.5t處*/
data_box2=ui_selectdatabox_create(select_frame2,″″,0.2,0.7,1.0,2.0,″1.5t″,″″,TRUE,″ELEM2D″,″prompt″)/*創(chuàng)建選擇板殼單元選擇框,1.5t處*/
此目的是依次選擇滿載四個(gè)工況和壓載四個(gè)工況,從而分別計(jì)算八種工況下應(yīng)力范圍分量應(yīng)力σt/2、σ3t/2,然后計(jì)算出σh,點(diǎn)擊“熱點(diǎn)應(yīng)力計(jì)算按鈕”,激活應(yīng)力計(jì)算函數(shù)“apply-cb”。其主要涉及函數(shù)為:
res_utl_get_loadcases(num_loadcases,lcids,nsub)
/*獲得荷載工況數(shù)及工況數(shù)號(hào)*/
db_get_load_case_title(loadcases_ids(i),name)
/*獲得荷載工況名*/
res_utl_get_subcases/*獲得荷載子工況名*/
res_utl_get_result_layers
/*獲得結(jié)果具體層,一般板單元有上下兩層結(jié)果*/
res_utl_extract_elem_results2/*獲得單元應(yīng)力*/
點(diǎn)擊“確定”按鈕,即可以將應(yīng)力范圍合成并寫入
“*.out”文件中,然后自動(dòng)存入“d:\pljs”文件夾中。通過(guò)SL與[SL](許用應(yīng)力范圍)比較,可判斷該部位疲勞分析是否滿足CCS指南疲勞強(qiáng)度分析要求。
本文對(duì)33 000 dwt散貨船進(jìn)行熱點(diǎn)應(yīng)力疲勞分析計(jì)算。全船除頂邊艙區(qū)域采用AH36鋼,外底板、內(nèi)底板采用AH32鋼以外,其余皆采用船用低碳鋼。該船總長(zhǎng)170m,船深26m,型深14.8m,方形系數(shù)0.837,滿載和壓載計(jì)算工況下吃水分別為9.98m和5.103m。船體外底板厚13mm,內(nèi)底板和底邊艙斜板厚15mm,甲板和舷側(cè)外板厚16 mm,頂邊艙斜板和橫艙壁厚14mm。對(duì)于艏端加強(qiáng)以外區(qū)域,船底縱骨和底邊艙舷側(cè)縱骨為HP 280mm×11mm,內(nèi)底縱骨和底邊艙斜板縱骨為HP 260mm×10mm,甲板縱骨、頂邊艙斜板縱骨、頂邊艙舷側(cè)縱骨為16mm×250mm,其三維有限元模型如圖5所示。
圖5 三維有限元模型
CCS指南對(duì)需要校核部位有詳細(xì)規(guī)定。本文也給出了100號(hào)肋位底邊艙與內(nèi)底板折角處,100號(hào)肋位單殼散貨船肋骨與底邊艙,100號(hào)肋位單殼散貨船肋骨與頂邊艙,內(nèi)底板與底凳斜板的連接處,橫艙壁與底凳頂板連接處,橫艙壁與頂?shù)市卑暹B接處共六處的細(xì)化有限元模型參見圖6。
熱點(diǎn)應(yīng)力分析結(jié)果見表1。其中垂向SV指船體梁垂向波浪彎矩引起的應(yīng)力范圍,水平SH指船體梁水平波浪彎矩引起的應(yīng)力范圍,海水動(dòng)壓力Se指海水動(dòng)壓力引起的局部應(yīng)力范圍,貨物Si指艙內(nèi)貨物壓力引起的局部應(yīng)力范圍,系數(shù)ρ指Se與Si之間的平均相關(guān)系數(shù),總體Sg指總體應(yīng)力范圍,局部Sl指局部應(yīng)力范圍,設(shè)計(jì)SL指各種工況下的設(shè)計(jì)應(yīng)力范圍,[SL]指許用應(yīng)力范圍。
圖6 細(xì)化有限元模型
表1 熱點(diǎn)應(yīng)力分析結(jié)果
本文采用PCL編程語(yǔ)言,實(shí)現(xiàn)了船體結(jié)構(gòu)熱點(diǎn)應(yīng)力法的疲勞分析,大大減少了在扣除腐蝕余量、荷載計(jì)算及施加、結(jié)果提取和分析等方面的工作量,有效提高了疲勞分析的效率。
[1]中國(guó)船級(jí)社.船體結(jié)構(gòu)疲勞強(qiáng)度指南[M].北京:人民交通出版社,2007:40-46.
[2]唐友宏,陳賓康.用MSC.Patran的PCL二次開發(fā)用戶界面[J].船海工程,2002(3):20-22.
[3]何祖平,王德禹.基于MSC.Patran二次開發(fā)的結(jié)構(gòu)參數(shù)化建模及其集成開發(fā)環(huán)境[J].船海工程,2005(2):17-20.
[4]MSC.Patran PCL and Customization[S].London:2010.
[5]MSC.Patran PCL Reference Manual[S].London:2010.
Development of hull structure fatigue analysis system by hot spot stress method
SONG Ya-ling1WU Jian-guo1LIN Yong2
(1.College of Architectural&Civil Engineering,Zhejiang University of Technology,Hangzhou 310032,China;2.Ship Inspection Bureau of Zhejiang Province,Hangzhou 310032,China)
The hot spot stress fatigue complex analysis of the hull structure is difficult to be implemented according to the guidelines for assessment of hull structure fatigue strength by CCS.A fatigue analysis system of hull structure is developed based on Patran Command Language of MSC.Patran to automatically achieve the deduction of corrosion allowance,load calculation,imposed fatigue loading,results extraction and analysis,which can greatly improve the efficiency of the hull structure fatigue analysis.
hull structure;hot spot stress;Patran Command Language(PCL);fatigue analysis
U661.4
A
1001-9855(2012)03-0034-06
浙江省交通廳“國(guó)內(nèi)航行海船結(jié)構(gòu)疲勞設(shè)計(jì)與審核方法研究”資助(編號(hào):2010W02)。
2011-12-21;
2011-12-29
宋亞玲(1986-),男,漢族,碩士研究生,研究方向:鋼結(jié)構(gòu)。
吳劍國(guó)(1963-),男,漢族,博士,教授,研究生導(dǎo)師,研究方向:鋼結(jié)構(gòu)。
林勇(1965-),男,漢族,雙學(xué)士,高級(jí)工程師,研究方向:船舶工程。