自定義本構(gòu)模型_第1頁(yè)
自定義本構(gòu)模型_第2頁(yè)
自定義本構(gòu)模型_第3頁(yè)
自定義本構(gòu)模型_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)4 自定義新的本構(gòu)模型4.1 介紹FLAC3D自定義本構(gòu)模型跟FLAC手冊(cè)中講到的用FISH來自定義本構(gòu)模型一樣。然而在FLAC3D中不支撐FISH語(yǔ)言來自定義本構(gòu)模型,自定義本構(gòu)模型開發(fā)必須用C+語(yǔ)言,且編譯成DLL文件(動(dòng)態(tài)鏈接庫(kù)),動(dòng)態(tài)鏈接庫(kù)文件能在需要的時(shí)候隨時(shí)加載上去。本構(gòu)模型的主函數(shù)主要是返回新的應(yīng)力,給出應(yīng)變?cè)隽?。然而自定義本構(gòu)模型也必須給出一些其他的信息:比如模型名稱和讀入、寫出保存文件等操作。C+語(yǔ)言是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,使用類(classes

2、)來代表對(duì)象(objects)。對(duì)象的數(shù)據(jù)被對(duì)象封裝起來,在對(duì)象的外面數(shù)據(jù)是不可見的。通過成員函數(shù)來訪問對(duì)象,而成員函數(shù)可以對(duì)封裝的數(shù)據(jù)進(jìn)行操作。另外C+語(yǔ)言強(qiáng)烈支持對(duì)象的等級(jí)結(jié)構(gòu),新的對(duì)象性質(zhì)可以從一個(gè)基本對(duì)象產(chǎn)生,基本對(duì)象的成員函數(shù)可以被派生出來的對(duì)象的成員函數(shù)替代。這些特點(diǎn)使程序更加模塊化。舉個(gè)例子:主程序需要在程序代碼的不同地方建立與派生類的不同變量之間的接口關(guān)系,但是這些僅僅只關(guān)系到基類,與派生類無關(guān)。運(yùn)行時(shí)間系統(tǒng)自動(dòng)的調(diào)用適當(dāng)?shù)呐缮惖某蓡T函數(shù)。對(duì)C+比較好的介紹來自Stevens (1994);它假象讀者有一定得編程語(yǔ)言知識(shí),特別是對(duì)C語(yǔ)言的了解。在4.2部分將介紹怎么用C+語(yǔ)言

3、開發(fā)自定義本構(gòu)模型。這節(jié)主要包括基類、成員函數(shù)、本構(gòu)模型編號(hào)、自定義本構(gòu)模型與FLAC3D之間的傳遞信息,本構(gòu)模型狀態(tài)指示器。在4.3節(jié)中將介紹怎樣生成DLL本構(gòu)模型。這一節(jié)主要包括自定義本構(gòu)模型的支持函數(shù),實(shí)例本構(gòu)的源代碼,F(xiàn)ISH支持的用戶自定義本構(gòu),和怎樣生成和加載一個(gè)DLL文件。在這一節(jié)中所有的參考文件被包含在“ITASCAModelsUDM”文件夾下面的“UDM.ZIP”這個(gè)壓縮包文件里面。注意:FLAC3D 3.0版本是用Microsoft Visual C+(VC+)7.1版本編譯的。用戶自定義的DLL文件最好采用與其相當(dāng)?shù)木幾g器來編譯,以使用戶自定義的DLL文件能與FLAC3D

4、兼容。4.2自定義本構(gòu)的方法4.2.1自定義本構(gòu)的基類以上介紹的方法是FLAC3D自定義本構(gòu)支持的方法?;悶閺幕惻缮鰜淼膶?shí)際的本構(gòu)模型提供框架。這個(gè)基類叫ConstitutiveModel類,被稱為“絕對(duì)”的類,因?yàn)樗暶髁嗽S多完全虛有的成員函數(shù)(通過=0語(yǔ)法附加到函數(shù)原型)。這意味著這個(gè)基類不能產(chǎn)生任何對(duì)象,以及從這個(gè)基類派生出來的任何對(duì)象都必須提供真實(shí)的成員函數(shù),以替代ConstitutiveModel類中的虛有成員函數(shù)。例子4.1,提供了ConstitutiveModel(包含在文件“CONMODEL.H”中)這個(gè)類的部分代碼,ConstitutiveModel類中的一些成員函數(shù),

5、像公共函數(shù)在例子4.1中省略掉了。公有函數(shù)的使用(像YoungPoissonFromBulkShear)是不用證明的,有關(guān)他們使用的例子可以在提供的本構(gòu)模型源程序中找到,F(xiàn)LAC3D使用其它的函數(shù)來操作和訪問本構(gòu)模型,用戶可以毫無理由的使用和重新定義這些。class ConstitutiveModel public:EXPORT ConstitutiveModel(unsigned uTypeIn,bool bRegister=false);EXPORT virtual ConstitutiveModel(void);/ ROUTINES THAT MUST BE SPECIFIED BY T

6、HE DERIVED TYPEvirtual const char *Keyword(void) const=0;virtual const char *Name(void) const=0;virtual const char *Properties(void) const=0;virtual const char *States(void) const=0;virtual double GetProperty(unsigned ul) const=0;virtual ConstitutiveModel *Clone(void) const=0;virtual double Confined

7、Modulus(void) const=0;virtual double ShearModulus(void) const=0;virtual double BulkModulus(void) const=0;virtual double SafetyFactor(void) const=0;virtual unsigned Version(void) const=0;virtual void SetProperty(unsigned ul,const double &d)=0;EXPORT virtual const char *Copy(const ConstitutiveModel *c

8、m)=0;virtual const char *Initialize(unsigned uDim,State *pst)=0;virtual const char *Run(unsigned uDim,State *pst)=0;EXPORT virtual const char *SaveRestore(ModelSaveObject *mso)=0;4.2.2成員函數(shù)任何派生出來的本構(gòu)模型必須提供真實(shí)的成員函數(shù)來代替ConstitutiveModel類中的虛擬函數(shù)。這些函數(shù)的功能在以下描述。const char *Keyword()表示返回字符數(shù)組的指針,這個(gè)字符數(shù)組包括本構(gòu)模型的名字,

9、用戶在使用MODEL這個(gè)命令時(shí)需要用到。舉個(gè)例子:“elastic”在C+中是個(gè)有效地字符串。const char *Name()表示返回字符數(shù)組的指針,這個(gè)字符數(shù)組包括的本構(gòu)模型名稱是用來在輸出時(shí)使用的(舉個(gè)例子:PRINT zone這個(gè)命令當(dāng)中可能用到)。它的名字可能和Keyword()這個(gè)成員函數(shù)的名字相同,也有可能不同,但是要注意FLAC3D在輸出的時(shí)候會(huì)截去長(zhǎng)的字符串。舉個(gè)例子:“Linear/elastic”是個(gè)有效地字符串。const char *Properties(),表示返回字符串?dāng)?shù)組的指針,這個(gè)字符串?dāng)?shù)組包括模型的材料參數(shù)名稱,和一個(gè)指向這個(gè)字符串末尾的空指針。接下來的例

10、子是一個(gè)有效地字符串?dāng)?shù)組:“shear”,“bulk”,0,給出的材料參數(shù)名字將會(huì)被PROPERTY命令識(shí)別。注意到字符串?dāng)?shù)據(jù)就像上面一樣必須以0為結(jié)尾。const char *States()表示返回字符串?dāng)?shù)組的指針,這個(gè)字符串?dāng)?shù)組表示單元狀態(tài)名稱,以及一個(gè)指向字符串末尾的空指針。這個(gè)名字用在輸出或是顯示用戶自定義本構(gòu)模型內(nèi)部狀態(tài)(比如塑性流動(dòng))。接下來的例子是一個(gè)有效的字符串?dāng)?shù)組:“yielding”,“tension”,0。變量mState在4.2.4中介紹。注意到字符串?dāng)?shù)據(jù)就像上面一樣必須以0為結(jié)尾。SetProperty(unsigned n, const double &dVal)

11、,變量dVal的值在FLAC3D中以“PROP name=dVal”這個(gè)命令賦值。變量n是一個(gè)從1開始的序列數(shù),通過調(diào)用Properties()這個(gè)函數(shù)來表示材料參數(shù)名稱。本構(gòu)對(duì)象需要在他適當(dāng)?shù)乃接袃?nèi)存中存取以上提供的數(shù)值。double GetProperty(unsigned n)返回本構(gòu)模型材料參數(shù)一個(gè)序號(hào)n(在Properties()函數(shù)中定義的,n=1從第一個(gè)材料參數(shù)開始)const char *Copy(const ConstitutiveModel *cm),這個(gè)成員函數(shù)首先調(diào)用基類Copy函數(shù),然后通過cm從對(duì)象本構(gòu)中復(fù)制所有必須的數(shù)據(jù)(假定目前的本構(gòu)模型與其是相同的派生類)。假

12、如發(fā)生錯(cuò)誤,將返回一個(gè)描述錯(cuò)誤的字符串,反之返回0。當(dāng)調(diào)用Initialize()這個(gè)函數(shù)時(shí),就沒有必要復(fù)制數(shù)據(jù)重新計(jì)算。const char *Initialize(unsigned uDim, State *ps),當(dāng)CYCLE這個(gè)命令使用時(shí)或是大變形模式時(shí),這個(gè)函數(shù)在每個(gè)模型對(duì)象中僅僅被調(diào)用一次(例如每個(gè)單元)。這個(gè)對(duì)象能夠初始化材料參數(shù)或是單元狀態(tài)變量,或是什么都不初始化。求解問題的維數(shù)用uDim這個(gè)變量來表示。結(jié)構(gòu)體ps(4.2.4)包含本構(gòu)模型中單元當(dāng)前的信息。當(dāng)檢測(cè)到錯(cuò)誤信息時(shí),必須有一個(gè)指針指向一個(gè)表示錯(cuò)誤的字符串,反之就返回0。注意,當(dāng)調(diào)用Initialize()這個(gè)函數(shù)時(shí),

13、并不給出應(yīng)變。對(duì)整個(gè)單元的平均應(yīng)力分量可以從狀態(tài)結(jié)構(gòu)體重得到,他們不能被Initialize()這個(gè)函數(shù)的成員函數(shù)調(diào)用。const char *Run(unsigned uDim, State *ps)當(dāng)FLAC3D對(duì)每個(gè)單元盡心掃描時(shí),這個(gè)函數(shù)被調(diào)用起來主要是針對(duì)自結(jié)構(gòu)(每個(gè)單元最多可以劃分為10個(gè)子結(jié)構(gòu))。這個(gè)模型通過應(yīng)變?cè)隽縼砀聭?yīng)力張量。Ps這結(jié)構(gòu)體包括目前的應(yīng)力分量,并且計(jì)算每個(gè)子結(jié)構(gòu)的應(yīng)變?cè)隽糠至?。?dāng)這個(gè)函數(shù)調(diào)用時(shí),同時(shí)也考慮了由于旋轉(zhuǎn)而產(chǎn)生的應(yīng)力誤差。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),應(yīng)當(dāng)返回一個(gè)表示錯(cuò)誤的字符串指針,反之就返回0.double ConfinedModulus(void)這個(gè)對(duì)象返回

14、一個(gè)值,這個(gè)值可以更好的估計(jì)最大的受壓模量。它應(yīng)用在FLAC3D計(jì)算穩(wěn)定時(shí)間步中,對(duì)于一個(gè)線性的彈性模型來說,這個(gè)受壓模量是K + 4G/3。double ShearModulus(void)這個(gè)對(duì)象返回一值,這個(gè)值可以更好的估計(jì)當(dāng)前的正切剪切模量。這個(gè)使用在FLAC3D動(dòng)力本構(gòu)模型中粘滯靜態(tài)邊界系數(shù)。double BulkModulus(void) FLAC3D目前還沒有使用這個(gè)對(duì)象,但是這個(gè)對(duì)象可以很好的返回對(duì)當(dāng)前的正切體積模量的估計(jì)。double SafetyFactor(void)這個(gè)對(duì)象目前也還沒有使用,它必須返回一些值,像10.0。unsigned Version(void)這個(gè)對(duì)

15、象返回本構(gòu)模型版本號(hào)。這個(gè)用來處理早期本構(gòu)模型版本保存的結(jié)果文件,而這早期的本構(gòu)模型可能忽略了一些變量。ConstitutiveModel *Clone(void)創(chuàng)建一個(gè)新的對(duì)象,必須與當(dāng)前類相同,返回一個(gè)ConstitutiveModel類指針。不管FLAC3D什么時(shí)候在一個(gè)單元中調(diào)用本構(gòu),它都被調(diào)用。const char *SaveRestore(ModelSaveObject *mso)當(dāng)SAVE或是RESTORE命令給出時(shí),這個(gè)被函數(shù)調(diào)用。本構(gòu)模型必須首先調(diào)用基類的SaveRestore()這個(gè)函數(shù)。SaveRestore()允許本構(gòu)模型保存或是恢復(fù)每個(gè)對(duì)象的數(shù)據(jù)。僅僅允許保存整數(shù)類

16、型或是浮點(diǎn)數(shù)類型,其他的數(shù)據(jù)類型必須要轉(zhuǎn)換成這兩種類型。派生類函數(shù)必須首先調(diào)用mso-Initialize(nd,ni),這里nd表示雙精度存?。ɑ蚴腔謴?fù))數(shù)據(jù)字節(jié)數(shù),ni表示整型存?。ɑ蚴腔謴?fù))數(shù)據(jù)字節(jié)數(shù)。變量通過mso-Save(ns,var)這個(gè)函數(shù)識(shí)別,這里ns是變量的序號(hào)(從0到nd-1或是從0到ni-1),而這主要取決于實(shí)際整型或是浮點(diǎn)型數(shù)據(jù)存取或恢復(fù)的位數(shù),var是需要保存的變量。有單獨(dú)的Save()去處理整型或是實(shí)型變量。這個(gè)結(jié)構(gòu)體類ModelSaveObject是不怎么重要的,除了以上提到的函數(shù)。它被定義在“CONMODEL.H”這個(gè)頭文件中。重新定義的類也必須包含構(gòu)造函數(shù),

17、而這個(gè)構(gòu)造函數(shù)調(diào)用基類的構(gòu)造函數(shù)。如果這個(gè)bRegister變量的值為true,基類的構(gòu)造函數(shù)就被調(diào)用,然后派生出來的本構(gòu)模型就被FLAC3D注冊(cè)登記過。一個(gè)與模型相關(guān)的數(shù)(uTypeIn)也必須通過;這使得當(dāng)從一個(gè)文件中恢復(fù)出來的單元能夠重新設(shè)置正確的本構(gòu)模型。一般取一個(gè)比較的值來表示這個(gè)(比如100或是更大),以避免與從1開始的模型內(nèi)置變量產(chǎn)生沖突。在其他的所有情況中,派生類構(gòu)造函數(shù)在被調(diào)用時(shí),應(yīng)當(dāng)不含任何參數(shù),就像Clone這個(gè)成員函數(shù)一樣。通過構(gòu)造函數(shù)可以初始化成員數(shù)據(jù),就像例4.2所示。在這個(gè)例子中本構(gòu)模型的特別號(hào)是整型變量mnUserMohrModel(具體看例4.5),這些符號(hào)“

18、dBulk”、“dShear”等等是派生類的數(shù)據(jù)成員。Example 4.2 Typical model constructorUserMohrModel:UserMohrModel(bool bRegister):ConstitutiveModel(mnUserMohrModel,bRegister), dBulk(0.0),dShear(0.0), dCohesion(0.0), dFriction(0.0), dDilation(0.0),dTension(0.0), dYoung(0.0), dPoisson(0.0), dE1(0.0), dE2(0.0),dG2(0.0), dNPH(0.0), dCSN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論