最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Win + Linux ABAQUS UMAT / DEBUG

2023-06-10 11:15 作者:Mangoccc丶  | 我要投稿

分享一下在Windows以及Linux上的ABAQUS UMAT開發(fā)及調(diào)試的一點點心得。

1 平臺及版本:

Win 10 + Vs 2022 + Intel Fortran 2022 + ABAQUS 2019

Ubuntu 18 + GCC 7.5 + ABAQUS 2019

2 UMAT語法及平臺特性:

Fortran:

subroutine umat(stress,statev,ddsdde,sse,spd,scd,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ?rpl,ddsddt,drplde,drpldt,?stran,dstran,time,

? ? ? ? ? ? ? ? ? ? ? ? ? ?dtime,temp,dtemp,predef,dpred,cmname,

? ? ? ? ? ? ? ? ? ? ? ? ? ?ndi,nshr,ntens,nstatv,props,nprops,coords,drot,pnewdt,

? ? ? ? ? ? ? ? ? ? ? ? ? ?celent,dfgrd0,dfgrd1,noel,npt,layer,kspt,kstep,kinc)


C++:

extern "C"?

void umat_(double *stress, double *statev, double *ddsdde, double *sse, double *spd,

? ? ? ? ? ? ? ? ? ?double *scd, double *rpl, double *ddsddt, double *drplde, double *drpldt,

? ? ? ? ? ? ? ? ? ?double *stran, double *dstran, double *time, double *dtime, double *temp,

? ? ? ? ? ? ? ? ? ?double *dtemp, double *predef, double *dpred, char *cmname, int *ndi,

? ? ? ? ? ? ? ? ? ?int *nshr, int *ntens, int *nstatv, double *props, int *nprops,?

? ? ? ? ? ? ? ? ? ?double *coords, double *drot, double *pnewdt, double *celent, double *dfgrd0,?

? ? ? ? ? ? ? ? ? ?double *dfgrd1, int *noel, int *npt, int *layer, int *kspt,?

? ? ? ? ? ? ? ? ? ?int *kstep, int *kinc)


圖1 ABAQUS的c++版本的umat,注意函數(shù)名字叫做umat_不是umat

無論在Fotran還是C++,umat各個參數(shù)以指針形式讀寫。

需要注意的是,考慮到c++的mangling技術(shù)的使用,在某些系統(tǒng)中,UMAT的大小寫以及symbol可能不同。


以Ubuntu18為例,UMAT實際的名字為umat_。

若要甄別umat在編譯后的symbol名字,建議使用如下操作:


對一個簡單的fortran umat文件進(jìn)行編譯:

gfortran -c test.o umat_example.for


導(dǎo)出symbol :

nm test.o > symbol.log

從而準(zhǔn)確獲取umat的symbol。


:C++版本umat也可應(yīng)用于Windows系統(tǒng)。


3?UMAT編譯及其鏈接:

對于給定的umat.f, umat.for或者umat.cpp,abaqus分兩步對其操作。

第一步編譯:將源碼編譯為obj或者o文件。

圖2 ABAQUS編譯umat到obj文件

第二部鏈接:將obj或者o文件與ABAQUS內(nèi)置動態(tài)鏈接庫鏈接,形成stadardU.dll


圖3 ABAQUS鏈接umat.obj到stardardU.dll

在abaqus實際運算階段,standard.exe將鏈接到新生成的standardU.dll,以此來完成最終操作。


圖4 ABAQUS將內(nèi)置standard.exe拷貝至工作路徑并鏈接到新的standardU.dll

如上編譯+鏈接的邏輯,允許我們可以寫多種語言版本的umat。

若選擇c++版本,則可手動利用msvc-cl/clang/GCC完成對cpp文件的編譯,僅在鏈接階段提供給ABAQUS。

若選擇fortran版本,則可直接提供.for源代碼,將編譯和鏈接都交給ABAQUS來完成。


4?UMAT Debug:

雖然PRINT大法直觀且易于實現(xiàn),但某些時候可能需要更為細(xì)致的debug。

Windows上可以利用VS + Intel Fortran完成調(diào)試,

Linux上可利用gdb調(diào)試,不過此部分內(nèi)容尚未測試,可能會在稍后開展。

本此測試選取較新的vs 2022 以及oneapi 2022對abaqus 2019進(jìn)行debug。

關(guān)于版本的選取,尚無更多建議,但是提醒大家較老的vs可能存在debug symbol未加載的情況。


Release vs Debug

Release與Debug相對,為代碼編譯及鏈接的狀態(tài)描述。

若代碼為Release模式,則代碼內(nèi)部無調(diào)試信息,且代碼的執(zhí)行經(jīng)過編譯器優(yōu)化。

若代碼為Debug模式,在代碼編譯及鏈接過程中,編譯器會額外加入調(diào)試信息,允許用戶以多種形式對代碼進(jìn)行測試,包括但不限于,查看變量取值,查看段錯誤等。


在編譯階段:intel fortran編譯器 ifort 允許用戶輸入 /Zi 和 /debug來啟用debug調(diào)試。

/Zi: 允許調(diào)試信息與代碼單獨存在,調(diào)試信息文件可能為vc xx.pdb形式,xx為數(shù)字編號,屈居于vs版本。

/debug: 允許編譯器額外增加調(diào)試信息。

在鏈接階段:microsfot 鏈接器 link 允許用戶輸入 /debug 來啟用debug調(diào)試


ABAQUS的編譯及鏈接:

ABAQUS的編譯與鏈接配置,路徑為:

C:\Program Files\Dassault Systemes\SimulationServices\V6R2019x\win_b64\SMA\site

文件名為win86_64.env (windows)?或者 lnx86_64.env (linux)。


圖5 ABAQUS的編譯及鏈接配置存放于win86_64.env

用戶可將該配置拷貝至當(dāng)前工作目錄下的 abaqus_v6.env用于覆蓋原設(shè)置。


5?UMAT VS Debug:

假設(shè)用戶有如下inp文件以及umat:


圖6 最小umat debug例子

若要開始DEBUG,可能需要在umat.for適當(dāng)位置加入, read(*,*)variables

通過IO讀寫,來阻塞umat以及standard.exe,便于vs attach到對應(yīng)進(jìn)程。


在開始菜單打開intel oneapi內(nèi)置的 intel oneapi prompt x64 (這是一個配置好的命令行)


切換到當(dāng)前工作路徑,并執(zhí)行如下操作

abaqus job=model user=umat.for verbose=3 int


verbose=3?為了最大化顯示abaqus操作記錄,便于正確分析是否umat已被編譯。

int 為了使得命令行可與abaqus進(jìn)行io通信,利用阻塞來開始abaqus debug。


圖6中那個 block 字樣是我自己寫的,你們可以替換為任意字樣。


若standard.exe發(fā)生阻塞

圖7 ABAQUS已被認(rèn)為設(shè)置的io阻塞,此時可進(jìn)行debug

此時利用vs打開umat.for,準(zhǔn)備attach到進(jìn)程

圖8 VS->DEBUG->ATTACH TO PROCESS開始

圖9 選擇standard.exe進(jìn)行attach


當(dāng)attach成功后,在umat.for合理位置打入斷點

在intel prompt中隨意輸入一個數(shù)字,取消阻塞。


step into/step over按鈕中,開始你的debug歷程吧。


圖10?attach完成已經(jīng)開始debug

例子中,使用了Elastic umat材料。

模量為10000,可見 locals 已經(jīng)成功捕捉到了該變量。


6?小結(jié):

umat 在c++版本中,可能名字為 umat_

umat在win中的編譯器默認(rèn)為 ifort,鏈接器為 msvc-link

umat在linux中編譯器為 gcc/g++/gfortran,鏈接器為 ld


用戶可編寫cpp或者for文件,可任意選擇在編譯或者鏈接期,將umat傳輸給ABAQUS

DEBUG過程中,合理的IO阻塞允許VS方便的調(diào)試umat。


最后,vs ifort 以及abaqus版本之間的適配:

對于 abaqus 2017 及以后的版本,不推薦使用 vs 2013?及以前的版本。


謝絕任何方式的轉(zhuǎn)載,謝謝!


能力所限,可能文中會存在錯誤和不當(dāng)之處,敬請包涵!

請多多提出指正、疑問或者建議,非常感謝!

Win + Linux ABAQUS UMAT / DEBUG的評論 (共 條)

分享到微博請遵守國家法律
中宁县| 镇原县| 台东市| 蓬莱市| 绥江县| 米林县| 麦盖提县| 静宁县| 长武县| 集贤县| 合江县| 彭州市| 乳山市| 巴林右旗| 玉门市| 辽源市| 昭苏县| 灵宝市| 文水县| 绥阳县| 临城县| 东安县| 青龙| 曲周县| 北海市| 健康| 太仓市| 镇宁| 家居| 乌兰浩特市| 汨罗市| 宁城县| 甘德县| 始兴县| 泾阳县| 乐昌市| 盐津县| 江达县| 久治县| 华坪县| 兴仁县|