郭玉榮+++劉鐘真??
摘要:研究了以有限元軟件OpenSees為核心計算平臺的子結(jié)構(gòu)擬動力試驗方法,主要探討了在OpenSees中實現(xiàn)子結(jié)構(gòu)反應(yīng)量實時查詢、子結(jié)構(gòu)邊界條件處理,以及利用OpenSees的通信協(xié)議實現(xiàn)試驗子結(jié)構(gòu)和整體結(jié)構(gòu)時程分析程序之間位移指令和反饋力的數(shù)據(jù)交換方法.利用本文方法進(jìn)行了8層防屈曲支撐高層鋼框架的虛擬子結(jié)構(gòu)擬動力試驗,試驗結(jié)果與采用OpenSees進(jìn)行整體時程分析的結(jié)果吻合良好,證明了本文子結(jié)構(gòu)擬動力試驗方法的可行性與有效性.
關(guān)鍵詞:子結(jié)構(gòu);擬動力試驗方法;OpenSees;通訊協(xié)議
中圖分類號:TU317 文獻(xiàn)標(biāo)識碼:A
擬動力試驗是研究結(jié)構(gòu)體系地震響應(yīng)的有效手段之一,但由于試驗條件限制,往往難以進(jìn)行整體結(jié)構(gòu)的擬動力試驗,子結(jié)構(gòu)擬動力試驗方法則是解決這一問題的有效手段.該方法將復(fù)雜結(jié)構(gòu)分為兩部分,將在地震作用下容易損壞的強非線性部分結(jié)構(gòu)進(jìn)行試驗,稱作試驗子結(jié)構(gòu);而其余部分由有限元軟件計算模擬,稱為數(shù)值子結(jié)構(gòu).通過求解結(jié)構(gòu)運動控制方程,在每一步對兩類子結(jié)構(gòu)進(jìn)行加載模擬,來完成擬動力試驗[1-4].這樣一方面可解決結(jié)構(gòu)中強非線性特性部分模擬困難的問題,另外一方面減小了試驗規(guī)模,降低了對試驗設(shè)備的要求.
子結(jié)構(gòu)擬動力試驗需要編制整體結(jié)構(gòu)地震反應(yīng)時程分析程序和數(shù)值子結(jié)構(gòu)非線性模擬程序,但是程序編制需要大量的投入,所以目前我國所開發(fā)的子結(jié)構(gòu)擬動力試驗程序大多是針對比較簡單的結(jié)構(gòu)模型.如果能利用現(xiàn)有成熟的有限元分析軟件作為核心計算模塊,將會大大加快子結(jié)構(gòu)擬動力試驗程序的開發(fā)和該試驗方法的應(yīng)用.關(guān)于利用現(xiàn)有軟件進(jìn)行擬動力試驗程序開發(fā)和擬動力試驗,已有學(xué)者進(jìn)行了一些嘗試,如王瑾等使用Matlab作為主程序求解結(jié)構(gòu)動力方程,使用OpenSees求解數(shù)值單元反力,并進(jìn)行了數(shù)值模擬[5];王強等使用OpenFresco和MTS FlextestGT實現(xiàn)了OpenSees有限元軟件和MTS試驗設(shè)備之間的數(shù)據(jù)傳遞[6];徐國山等使用OpenFresco接口程序和控制程序LabVIEW/dSPACE實現(xiàn)了與OpenSees的數(shù)據(jù)傳遞,并進(jìn)行了彈性的單層框架試驗和非線性三層防屈曲支撐框架的試驗[7-8].但是目前的嘗試都是利用OpenFresco接口程序連接OpenSees來進(jìn)行的,當(dāng)遇到OpenFresco不支持的試驗設(shè)備時,還需要另外開發(fā)設(shè)備連接程序.此外OpenFresco的遠(yuǎn)程試驗功能還不完善.
為減少子結(jié)構(gòu)擬動力試驗程序的中間環(huán)節(jié),提高試驗效率和擴大其遠(yuǎn)程協(xié)同試驗功能,本文直接利用OpenSees地震反應(yīng)時程分析功能和數(shù)值子結(jié)構(gòu)模擬功能來開發(fā)子結(jié)構(gòu)擬動力試驗程序,主要探討基于OpenSees的子結(jié)構(gòu)擬動力試驗程序開發(fā)涉及的關(guān)鍵問題,包括在OpenSees中實現(xiàn)子結(jié)構(gòu)反應(yīng)量的實時查詢、子結(jié)構(gòu)邊界條件的處理,以及利用OpenSees的通信協(xié)議實現(xiàn)試驗子結(jié)構(gòu)和整體結(jié)構(gòu)時程分析程序之間位移指令和反饋力的數(shù)據(jù)交換方法等問題.在驗證本文方法的正確性時,為消除試驗和數(shù)值模擬之間差異產(chǎn)生的干擾影響,整體結(jié)構(gòu)時程分析、數(shù)值子結(jié)構(gòu)和試驗子結(jié)構(gòu)的模擬都采用OpenSees來實現(xiàn).在該試驗方法得到論證之后,即可融入作者參與開發(fā)的NetSLab系統(tǒng)[9]實現(xiàn)遠(yuǎn)程協(xié)同的真實子結(jié)構(gòu)擬動力試驗.
1子結(jié)構(gòu)擬動力試驗方法原理
子結(jié)構(gòu)擬動力試驗方法是把結(jié)構(gòu)分成兩部分,即試驗子結(jié)構(gòu)和數(shù)值子結(jié)構(gòu).一般把結(jié)構(gòu)中受力復(fù)雜或破壞嚴(yán)重的部分當(dāng)作試驗子結(jié)構(gòu)進(jìn)行真實試驗,而把結(jié)構(gòu)的其他部分(彈性及彈塑性初期部分)當(dāng)作數(shù)值子結(jié)構(gòu)進(jìn)行數(shù)值模擬.結(jié)構(gòu)在地震作用下,通過真實試驗獲得處于大變形的或破壞狀態(tài)部位的地震反應(yīng),而利用數(shù)值模擬得到其他的彈性部分或次要部位的地震反應(yīng),以控制試驗規(guī)模與節(jié)約試驗經(jīng)費.子結(jié)構(gòu)擬動力試驗的一般流程如圖1所示.
基于OpenSees的子結(jié)構(gòu)擬動力試驗系統(tǒng)由OpenSees數(shù)值模擬系統(tǒng)和物理試驗設(shè)備系統(tǒng)組成.在OpenSees中進(jìn)行整體結(jié)構(gòu)的子結(jié)構(gòu)化,計算獲得相應(yīng)試驗子結(jié)構(gòu)位移并發(fā)給物理試驗設(shè)備系統(tǒng),后者將獲取的位移指令加載到試驗子結(jié)構(gòu)上,獲得恢復(fù)力并反饋給OpenSees數(shù)值模擬系統(tǒng).OpenSees數(shù)值模擬系統(tǒng)再通過選取的積分方法計算得到下一步的位移,如此循環(huán)直至試驗結(jié)束[10].
2基于OpenSees的子結(jié)構(gòu)擬動力試驗實現(xiàn)
方法
2.1OpenSees時程分析建模過程
1997年McKenna在其博士學(xué)位論文中建立了OpenSees的程序架構(gòu)[11],OpenSees的程序架構(gòu)已有文獻(xiàn)進(jìn)行了深入分析[12-13],該高層程序架構(gòu)如圖2所示.在該圖中,采用了建模語言(UML)來描述OpenSees的高層程序架構(gòu),矩形代表面向?qū)ο蟪绦蛟O(shè)計的類;虛線與實線箭頭即子類與父類間的承繼關(guān)系,箭尾即子類,箭頭即父類,虛線即實現(xiàn),實線則代表承繼;有菱形箭尾的箭頭代表一種聚合關(guān)系,跟菱形相連的類代表箭頭指向的類的一個聚合體.在OpenSees中,其整個過程包括4個模塊: 模型建立(model builder)、域(domain)、分析(analysis)及記錄(recorder).模型建立為OpenSees程序架構(gòu)的基礎(chǔ),利用Tcl腳本語言實現(xiàn)建立、節(jié)點、約束及單元信息,并且該信息被添加到域;整個軟件架構(gòu)的核心為域模塊,其把有限元分析所需的載荷、節(jié)點、約束及單元信息存儲起來;OpenSees的程序架構(gòu)的靈魂為分析模塊,其進(jìn)行有限元的分析,并且將域中所存儲的信息更新;記錄模塊執(zhí)行監(jiān)視功能,同時在分析過程中記錄有限元模型的相關(guān)信息,包括內(nèi)力、位移及變形等信息,以方便后處理.
2.2子結(jié)構(gòu)擬動力試驗方法在OpenSees中的實現(xiàn)
一般數(shù)值子結(jié)構(gòu)需要2個OpenSees 的模型文件,該文件由Tcl 語言編寫:一個是初始模型文件,其包含節(jié)點、邊界、單元和材料等模型參數(shù)與加載信息;另一個則是重啟動文件,其只包括加載信息.首先利用OpenSees 運行初始的模型文件,以后每一步都運行重啟動文件,同時在程序運行時,還需要一個能保存當(dāng)前步數(shù)、目標(biāo)位移與對應(yīng)的恢復(fù)力的數(shù)據(jù)文件.當(dāng)主程序運行之后,先利用數(shù)據(jù)文件保存當(dāng)前步數(shù)及由預(yù)測模塊所計算出的目標(biāo)位移, 再利用OpenSees運行模型文件.然后其通過讀取數(shù)據(jù)文件中的數(shù)值實現(xiàn)加載,加載完成后,其把所需要的反力值寫到數(shù)據(jù)文件上,最終通過主程序中的修正模塊讀取數(shù)據(jù)文件中的反力值,并且計算對應(yīng)的修正值.根據(jù)以上可知,試驗?zāi)M包括2個模型文件與一個數(shù)據(jù)文件,利用OpenSees 的輸入與輸出接口,實現(xiàn)數(shù)據(jù)的寫入與讀取.
2.2.1子結(jié)構(gòu)力邊界條件修改命令
OpenSees支持在分析過程中進(jìn)行模型參數(shù)的修改.表1所列的2個命令可以實現(xiàn)數(shù)值子結(jié)構(gòu)的有限元分析中力的邊界條件的修改.
2.2.2子結(jié)構(gòu)實現(xiàn)分析步內(nèi)模型的修改
OpenSees實現(xiàn)重啟動可以借助于Tcl腳本語言的for循環(huán)流程控制命令.表2所示的代碼可以完成分析步內(nèi)模型參數(shù)的修改.
2.2.3子結(jié)構(gòu)反應(yīng)量的實時查詢
在子結(jié)構(gòu)擬動力試驗中,試驗子結(jié)構(gòu)的每一步位移控制量是基于該分析步數(shù)值子結(jié)構(gòu)的數(shù)值模擬結(jié)果,這就要求在數(shù)值子結(jié)構(gòu)有限元分析的每一分析步內(nèi)提取試驗所需的反應(yīng)量.對于預(yù)測校正法,通常需要獲取目標(biāo)質(zhì)點在指定的動力自由度方向上的位移、速度和加速度,同時還需要獲取單元的反應(yīng)量,如軸力和軸向位移等.OpenSees提供了一系列的實時輸出命令可以實現(xiàn)各種反應(yīng)量的實時提取,這些命令見表3.
2.2.4在OpenSees中實現(xiàn)網(wǎng)際通信
OpenSees作為一款功能強大的有限元分析軟件框架,其強大之處不僅僅體現(xiàn)在其非線性分析能力上,更體現(xiàn)在其靈活的可擴展性上.OpenSees借助Tcl腳本語言進(jìn)行建模輸入.事實上,可以把Tcl看作是OpenSees的一個擴展,這樣OpenSees就是一門帶有限元分析功能的腳本語言了.由于Tcl自身集成有通信模塊,因此,可以直接在本文的模型文件中調(diào)用這些模塊實現(xiàn)OpenSees的網(wǎng)絡(luò)通信功能.關(guān)于Tcl腳本語言的使用可參考相關(guān)文獻(xiàn).表4是Tcl語言通信相關(guān)的基本語法.
2.2.5在OpenSees中實現(xiàn)服務(wù)器等待
在數(shù)值子結(jié)構(gòu)一端,即服務(wù)端完成模型的建立后,下一步就是等待試驗端,即客戶端的接入.一旦所有的目標(biāo)客戶端接入后,就可以在OpenSees和試驗機之間進(jìn)行數(shù)據(jù)交互.
為了更好地描述這個問題,本文將服務(wù)端記作A,3個希望與服務(wù)端建立連接的客戶端記作B,C,D.在A向B,C,D發(fā)送數(shù)據(jù)之前,A必須知道B,C,D的IP地址和端口號.這就是說在發(fā)送數(shù)據(jù)之前,A必須要與 B,C,D建立連接以后才能繼續(xù)下一步的操作.本文借助OpenSees使用的Tcl語言的事件驅(qū)動機制實現(xiàn)服務(wù)端與多個目標(biāo)客戶端的連接和等待.
Tcl語言內(nèi)置的vwait命令為此提供了很好的解決方案.vwait命令用于調(diào)用事件循環(huán),它接受一個參數(shù),這個參數(shù)一般情況下要求是全局變量,vwait命令進(jìn)入Tcl事件循環(huán)后,將一直等待,期間接收其他命令運行.如果某個命令運行重新設(shè)置了這個參數(shù),即使設(shè)置后這個值不變,vwait事件循環(huán)也將終止并返回.在基于OpenSees的分布式子結(jié)構(gòu)擬動力試驗平臺開發(fā)中,可以利用vwait實現(xiàn)OpenSees服務(wù)端和多個目標(biāo)試驗機客戶端的連接.
3基于OpenSees的子結(jié)構(gòu)擬動力試驗方法
驗證
以帶支撐的高層鋼結(jié)構(gòu)為例,通過對比子結(jié)構(gòu)擬動力試驗結(jié)果和OpenSees整體分析結(jié)果來驗證本文基于OpenSees 的子結(jié)構(gòu)擬動力試驗方法的正確性.為消除試驗實測和數(shù)值模擬之間差異產(chǎn)生的干擾影響,從驗證試驗方法的角度出發(fā),本文采用虛擬的子結(jié)構(gòu)試驗,即試驗子結(jié)構(gòu)也采用OpenSees程序來模擬其滯回特性,且和整體結(jié)構(gòu)時程分析中的模擬完全一致.
3.1試驗?zāi)P透艣r
試驗?zāi)P蜑橐婚瘞Х狼蔚?跨8層鋼結(jié)構(gòu),如圖3所示.每層層高為3 m,跨度為6 m,其中,樓板重度為23.53 kN/m3,板厚0.15 m,板跨度6 m.假定基礎(chǔ)與地基剛接,防屈曲支撐與主體框架結(jié)構(gòu)鉸接.梁、柱構(gòu)件選擇梁柱單元,不考慮剪切變形和扭轉(zhuǎn).防屈曲支撐為桁架單元.梁、柱構(gòu)件材料選用Q345鋼材,防屈曲支撐構(gòu)件材料采用Q235鋼材.樓面活荷載和屋面活荷載統(tǒng)一取為2.0 kN/m2.結(jié)構(gòu)的輸入地震波采用EI Centro地震波,結(jié)構(gòu)阻尼采用Rayleigh阻尼.梁、柱以及防屈曲支撐的模型參數(shù)見表5.試驗中,取出底層2個支撐作為試驗子結(jié)構(gòu),余下部分作為數(shù)值子結(jié)構(gòu),如圖4所示.為了更好地測試本文方法的分布式網(wǎng)絡(luò)通信功能,數(shù)值子結(jié)構(gòu)在另一臺獨立的計算機上進(jìn)行分析計算.該計算機與模擬試驗子結(jié)構(gòu)的計算機具有不同的IP地址.數(shù)值子結(jié)構(gòu)的補充信息說明見表6.
3.2線彈性算例驗證
結(jié)構(gòu)的所有材料均采用線彈性材料elastic,梁柱單元采用OpenSees中彈性單元elasticBeam Column,支撐采用桁架單元truss;試驗子結(jié)構(gòu)取底層人字形支撐,整體結(jié)構(gòu)時程分析結(jié)果和子結(jié)構(gòu)擬動力試驗結(jié)果的部分對比見表7.
從表7可看出,在線彈性情況下采用OpenSees進(jìn)行整體結(jié)構(gòu)時程分析的結(jié)果與子結(jié)構(gòu)擬動力試驗結(jié)果非常吻合,其頂點位移與底層層間位移峰值誤差為0.14%和0.08%,該微小差別可能來自舍入誤差,從而說明本文從OpenSees整體結(jié)構(gòu)計算中提取試驗子結(jié)構(gòu)的位移和將試驗子結(jié)構(gòu)恢復(fù)力返回OpenSees進(jìn)行下一步計算的過程和方法是正確的.
3.3非線性算例驗證
梁柱單元采用OpenSees中forceBeamColumn,支撐采用桁架單元truss;試驗子結(jié)構(gòu)取底層人字形支撐.梁柱單元抗彎恢復(fù)力模型采用雙線性模型,即采用Steel01材料;梁柱單元的軸向恢復(fù)力模型采用線性elastic模型,防屈曲支撐桁架單元的軸向恢復(fù)力模型采用Steel02曲線性模型.具體恢復(fù)力模型參數(shù)見表8.
1)水平位移時程曲線:圖5和圖6所示為節(jié)點1的水平位移時程曲線和底層層間位移時程曲線.從圖中可以看出OpenSees整體分析結(jié)果與子結(jié)構(gòu)擬動力試驗結(jié)果非常吻合.
時間/s
2)滯回曲線:從圖7所示的支撐1滯回曲線對比可見,子結(jié)構(gòu)擬動力試驗結(jié)果與OpenSees整體分析結(jié)果非常吻合.
在考慮結(jié)構(gòu)非線性行為的情況下,用OpenSees進(jìn)行整體結(jié)構(gòu)時程分析和子結(jié)構(gòu)擬動力試驗,兩者的結(jié)果也是非常吻合的,說明本文所建立的子結(jié)構(gòu)擬動力試驗方法是可行的.若將位移指令發(fā)送給設(shè)備控制系統(tǒng)對試驗子結(jié)構(gòu)進(jìn)行加載和反饋力給OpenSees,即可進(jìn)行真實的子結(jié)構(gòu)擬動力試驗.同時,子結(jié)構(gòu)的選取并不局限于支撐,可以選取柱子,一層或多層結(jié)構(gòu)作為子結(jié)構(gòu).
軸向變形/m
4結(jié)論
1)研究了基于OpenSees的子結(jié)構(gòu)擬動力試驗方法原理,實現(xiàn)了子結(jié)構(gòu)反應(yīng)量的實時查詢、子結(jié)構(gòu)邊界條件的處理,以及利用OpenSees的通信協(xié)議實現(xiàn)試驗子結(jié)構(gòu)和整體結(jié)構(gòu)時程分析程序之間位移指令和反饋力的數(shù)據(jù)交換方法,為真實子結(jié)構(gòu)試驗提供了理論基礎(chǔ).
2)借助OpenSees軟件平臺的高擴展性,運用套接字實現(xiàn)了網(wǎng)絡(luò)通信、服務(wù)器的等待及分析步內(nèi)的模型參數(shù)修改.
3)進(jìn)行了8層防屈曲支撐鋼結(jié)構(gòu)的虛擬子結(jié)構(gòu)擬動力試驗,試驗結(jié)果與整體結(jié)構(gòu)時程分析結(jié)果對比表明,本文基于OpenSees分析軟件所開發(fā)的子結(jié)構(gòu)擬動力試驗程序是可行且有效的.
4)本文利用成熟的有限元分析軟件開發(fā)子結(jié)構(gòu)擬動力試驗程序,擴展了子結(jié)構(gòu)擬動力試驗的范圍,與類似方法相比,本文方法減少了中間環(huán)節(jié),提高了試驗效率.
參考文獻(xiàn)
[1]范云蕾,肖巖,郭玉榮,等. 多層框架結(jié)構(gòu)遠(yuǎn)程協(xié)同擬動力試驗方法研究[J]. 湖南大學(xué)學(xué)報:自然科學(xué)版,2009,36(4):19-23.
FAN Yunlei,XIAO Yan,GUO Yurong, et al. Remotely collaborative pseudodynamic testing method for MDOF frame structure[J]. Journal of Hunan University: Natural Sciences, 2009,36(4):19-23.(In Chinese)
[2]郭玉榮,曾東,肖巖, 等. 橋梁結(jié)構(gòu)遠(yuǎn)程協(xié)同擬動力試驗平臺開發(fā)[J].湖南大學(xué)學(xué)報:自然科學(xué)版, 2009,36(9):1-6.
GUO Yurong, ZENG Dong, XIAO Yan, et al. Development of a remotely collaborative pseudodynamic testing platform for bridge structures[J]. Journal of Hunan University: Natural Sciences, 2009, 36(9): 1-6.(In Chinese)
[3]郭玉榮,黃民元. 防屈曲耗能支撐鋼管混凝土柱鋼梁組合框架子結(jié)構(gòu)擬動力試驗研究[J]. 建筑結(jié)構(gòu)學(xué)報,2014,35(11):62-68.
GUO Yurong, HUANG Minyuan. Substructuring pseudodynamic tests of a concrete filled steel tubular columnsteel beam composite frame with buckling restrained braces[J]. Journal of Building Structures, 2014, 35(11):62-68.(In Chinese)
[4]范云蕾,郭玉榮,肖巖,等. 多層框架結(jié)構(gòu)遠(yuǎn)程協(xié)同擬動力試驗研究[J]. 土木工程學(xué)報, 2011, 44(2):28-35.
FAN Yunlei, GUO Yurong, XIAO Yan, et al. Study on remote collaborative pseudodynamic tests of multistory frames[J]. China Civil Engineering Journal, 2011, 44(2):28-35.(In Chinese)
[5]王瑾,蔡新江,田石柱.基于OpenSees的CFRP加固RC短柱抗震性能數(shù)值模擬[J]. 世界地震工程, 2009, 25(4):108-111.
WANG Jin, CAI Xinjiang, TIAN Shizhu. Numerical simulation on seismic behavior of CFRP retrofitted RC short column based on OpenSees[J]. World Earthquake Engineering, 2009,25(4):108-111.(In Chinese)
[6]王強,馮帆,YOU S,等.基于有限軟件的子結(jié)構(gòu)擬動力試驗技術(shù)[J]. 沈陽建筑大學(xué)學(xué)報:自然科學(xué)版,2010,26(6):1085-1089.
WANG Qiang, FENG Fan, YOU Shawn, et al. Pseudo dynamic test method with substructure technique based on finite element software OpenSees[J]. Journal of Shengyang Jianzhu University: Natural Science, 2010,26(6): 1085-1089.(In Chinese)
[7]徐國山,郝偉,陳永盛,等.基于有限元軟件OpenSees的混合試驗系統(tǒng)及試驗驗證[J]. 振動與沖擊,2012,31(22):45-52.
XU Guoshan,HAO Wei,CHEN Yongsheng, et al. A hybrid testing system based on finite element software OpenSees[J]. Journal of Vibration and Shock, 2012, 31(22): 45-52.(In Chinese)
[8]徐國山,郝偉,陳永盛,等.基于有限元軟件OpenSees和OpenFresco的混合試驗[J].土木工程學(xué)報,2012,45(S1):36-41.
XU Guoshan,HAO Wei,CHEN Yongsheng, et al. Hybrid testing based on finite element software OpenSees and OpenFresco[J]. China Civil Engineering Journal, 2012,45(S1): 36-41.(In Chinese)
[9]郭玉榮,肖巖,胡慶,等. NetSLab網(wǎng)絡(luò)化結(jié)構(gòu)實驗室平臺[J]. 湖南大學(xué)學(xué)報:自然科學(xué)版,2006,33(S1):10-17.
GUO Yurong, XIAO Yan, HU Qing. et al. NetSLabnetworked structural laboratories platform[J]. Journal of Hunan University: Natural Sciences, 2006,33(S1):10-17.(In Chinese)
[10]何政,蔣碧聰. OpenSees混合模擬試驗技術(shù)發(fā)展與應(yīng)用[J].力學(xué)進(jìn)展,2012,42(6):804-820.
HE Zheng, JIANG Bicong. Development and applications of hybrid simulation and experimentation using OpenSees[J]. Advances in Mechanics, 2012,42(6): 804-820.(In Chinese)
[11]MCKENNA F T. Objectoriented finite element programming frameworks for analysis, algorithms, and parallel computing[D]. Berkeley: University of California, Berkeley, 1997:30-36.
[12]MCKENNA F T, FENVES G L. An objectoriented software design for parallel structural analysis[C]//Proceedings of the ASCE Structures Congress 2000. Reston: ASCE Press, 2000:1-8.
[13]TAKAHASHI Y, FENVES G L. Software framework for distributed experimentalcomputational simulation of structural systems[J]. Earthquake Engineering & Structural Dynamics, 2006, 35(3): 267-291.