
發布
注冊
/
登錄子程序調用的案例
在Linux(Centos7)下的用戶子程序調用的環境變量設置 ¥10
目前為止,網絡上依然沒有在linux系統下用戶子程序調用的環境變量設置與關聯,對Linux系統及其命令陌生的部分學生和科研人員而言,是個較大的挑戰。
為此,本文將以Centos 7 這一Linux操作系統為例,列出含用戶子程序調用的調試流程,以便給大家一些指導。
特別聲明,此文僅供學生、科研等人員本人參考、學習使用,請勿他用。
ansys之——將ANSYS作為子程序調用
將ANSYS作為子程序調用
對于優化或參數化設計,可以在VC或FORTRAN中將ANSYS作為子程序調用。具體調用方法如下:
1.在VC中調用ANSYS
::WinExec("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i input_file -o output_file",SW_SHOWNORMAL);
2.在FORTRAN中調用ANSYS
LOGICAL(4) result
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p
ansys_product_feature -i input_file -o output_file')
3.說明
1和2中,input_file為用APDL語言編寫的ANSYS輸入文件。
ansys_product_feature為你的ANSYS產品特征代碼。
需要注意的是,在VC中調用ANSYS時,需要加一條判斷語句,以確定ANSYS
已經執行完畢。
在FORTRAN中不需要判斷,FORTRAN會等ANSYS執行完畢才繼續執行下一條語句。
在VC中,我沒有找到與FORTRAN類似的函數,只好加一條循環判斷語句。
如果誰能找著這樣的函數,請告訴我,謝謝!
判斷方法很簡單,只需判斷錯誤文件file.err是否可寫就可以了。
因為當ANSYS在運行時,file.err是不可寫的,只有當它運行完畢,此文件才可寫。
數據文件(假設輸出的數據文件名為opt.out):
*dim,out1,,2,1
out1(1)=dmax !目標函數
out1(2)=1-eymax !
展開 將ANSYS作為子程序調用
對于優化或參數化設計,可以在VC或FORTRAN中將ANSYS作為子程序調用。具體調用方法如下:
1.在VC中調用ANSYS
::WinExec("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i input_file -o output_file",SW_SHOWNORMAL);
2.在FORTRAN中調用ANSYS
LOGICAL(4) result
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p
ansys_product_feature -i input_file -o output_file')
3.說明
1和2中,input_file為用APDL語言編寫的ANSYS輸入文件。
ansys_product_feature為你的ANSYS產品特征代碼。
需要注意的是,在VC中調用ANSYS時,需要加一條判斷語句,以確定ANSYS
已經執行完畢。
在FORTRAN中不需要判斷,FORTRAN會等ANSYS執行完畢才繼續執行下一條語句。
在VC中,我沒有找到與FORTRAN類似的函數,只好加一條循環判斷語句。
如果誰能找著這樣的函數,請告訴我,謝謝!
判斷方法很簡單,只需判斷錯誤文件file.err是否可寫就可以了。
因為當ANSYS在運行時,file.err是不可寫的,只有當它運行完畢,此文件才可寫。
數據文件(假設輸出的數據文件名為opt.out):
*dim,out1,,2,1
out1(1)=dmax !目標函數
out1(2)=1-eymax !
展開 PLC的條件跳轉、子程序調用知識大全,學會了就是老電氣師傅了!
當我們按下X001的時候,指針調用到P11,程序開始從P11這個地方從上往下開始執行,當碰到第一個SRET的時候,程序又返回到主程序中,但是在這個程序中如果X002被接通,那么程序指針則調用到P12,程序開始從上到下運行,當碰到第二個SRET的時候,程序返回到P12這個地方,然后在碰到第一個SRET的時候,返回到主程序。因為P12這個程序是嵌套在P11這個程序中的,所以我們要注意,在PLC中這種程序嵌套最多只能使用5級。
更多電工電氣電路水電裝修專業知識請關注微信公眾號:電工干貨,或者加小編V?:2650502291,感謝!
中斷指令:
中斷指令總共有3條,我們用一個表格來詳細說明:
在這里FEND前面的為主程序,FEND后面的為中斷子程序,中斷子程序能否進行與中斷條件與中斷指針有關,所以在這里我們得給大家說說中斷指針的格式:
中斷指針:
定時中斷:
程序示例:
我們先給大家介紹一下這個程序:FEND前面的程序表示主程序,后面的表示中斷子程序,EI表示允許中斷,IRET表示中斷返回指令,I610指針表示,中斷時間為10mm,6表示最高中斷級別。
當我們按下X000后K1的數據被傳送到D1里面去,K255的數據被傳送D2里面去,M1被置位接通,中斷子程序運行。
展開 
ABAQUS顯式子程序調用規則及nblock變量解釋
ABAQUS在調用VUHARD子程序時,每次向子程序提供136個單元(單元數<136則提供所有單元)進行計算,使用(do k=1,nblock → end do)計算每一個單元的相關變量。因此對于1000單元來說,一共調用8次子程序。
設置全局變量commom /globals/ kdtest,在ABAQUS每一次調用子程序之后,給其加一,統計模擬過程中的總循環數,在(do k=1,nblock → end do) 循環內部輸出變量kdtest的值。(全局變量可以不跟著k的循環而變化,用戶可以根據需求設置其在代碼中的功能),結果截圖如下:
共1000個數據,1~7各重復了136次,8重復了48次,與上述分析一致。
因此在nblock實際代表的是ABAQUS提供給子程序的材料點塊,這個塊區包含的單元數與模型單元數有關,而k則是對該材料點塊實現一個遍歷,確保每個單元都被考慮到。本研究僅針對于單核計算來講,多核模擬將在后續展開介紹。
展開 Abaqus復合材料Larc05失效準則Umat子程序開發
之前在https://www.yqgqt.org.cn/content/post/1279990 這個帖子里介紹了Abaqus內置的Larc05子程序調用方法,因為內置的Larc05子程序是通過Udmgini子程序結合Xfem來實現的,因此還是存在一定的局限性的。本帖考慮了復合材料的剪切非線性行為,在材料本構中引入了Hahn-Tsai的剪切非線性模型
式中,β為剪切非線性因子。
通過編寫Umat子程序,對復合材料的損傷行為進行了模擬,計算結果如下。
90度鋪層損傷和載荷位移曲線
0度鋪層損傷和載荷位移曲線
45度鋪層損傷和載荷位移曲線
由上圖可以看出,引入剪切非線性后,45度鋪層試驗件的拉伸曲線表現出明顯的非線性行為
有關于子程序二次開發或者復材仿真的問題可以聯系QQ1653004885或者關注CAE320公眾號
展開 (完整)在Abaqus中使用.f90格式的子程序的方法
一、前言
Fortran語言發展至今已經推出了若干版本,那么究竟采用哪個版本來編寫Abaqus子程序呢?這是困擾很多同學的問題,因為我們能買的Fortran教材基本都是講解的Fortran90/95以上的版本。但是直接采用90或者95以上的版本編寫子程序,Abaqus卻又不能識別。
這里需要說明一點,Abaqus原生支持的FORTRAN77的語法形式,因此采用77寫子程序肯定是沒有問題的,但是實際上更高級的比如90也是能夠支持的,需要對.env文件進行修改,加入支持90的語句即可。
二、方法
Abaqus默認支持的是固定(FORTRAN77)格式的Fortran子程序。編譯或者調用子程序時會自動搜索文件后綴為:*.for, *.f, *.C, *.c, *.cc, *.CPP, *.cpp, *.CXX, *.cxx 的源代碼文件。
如果想使用.f90自由格式的Fortran子程序,需要修改Abaqus的環境配置文件。
展開 調用UMAT子程序
在調用編寫的子程序時出現以下錯誤,請問各位大俠是什么錯誤啊?
ABAQUS Error: Problem during compilation - df.exe not found in PATH.
ABAQUS/Analysis exited with errors
MARC調用用戶子程序的問題一些技巧
MARC調用用戶子程序的問題.txt
下載地址:
http://www.caenet.cn/data/Data.aspx?ID=309
Abaqus用戶子程序USDFLD調用GETVRM 返回值為0
SDEG云圖是有數值的但是調用一直為零麻煩各位大佬幫忙看看 以下是源代碼 SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT, 1 TIME,DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER, 2 KSPT,KSTEP,KINC,NDI,NSHR,COORD,JMAC,JMATYP,MATLAYO, 3 LACCFLA) C INCLUDE 'ABA_PARAM.INC' C CHARACTER*80 CMNAME,ORNAME CHARACTER*3 FLGRAY(15) DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3), 1 T(3,3),TIME(2) DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*), 1 COORD(*) C real alfa,K0,D,DAMAGED_K,K PARAMETER(TOLER=1.0E-6) alfa=4.0 K0=1.0E-6 C Absolute value of current strain: CALL GETVRM('SDEG',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP, 1 MATLAYO,LACCFLA) D=ARRAY(1) IF (D.LE.TOLER) THEN D=0 END IF DAMAGED_K=EXP(alfa*D) K=K0*DAMAGED_K C field variable FIELD(1)=D C state variable STATEV(1)=D STATEV(2)=K C If error, write comment to .DAT file: IF(JRCD.NE
展開 Abaqus調用內置子程序模擬形狀記憶合金 ¥19.89
超彈性示意圖如圖2所示
圖2 超彈性示意圖
為了在Abaqus中模擬形狀記憶合金的形狀記憶效應以及超彈性行為,我們可以通過編寫Umat/Vumat子程序來實現。但是由于編寫子程序需要很高的門檻,同時也需要花費大量時間精力,因此本文向大家介紹了一種直接調用Abaqus內部SMA材料本構的方法。
SMA內置本構的調用方法與自編子程序相比更加便捷,無需安裝Fortran開發環境。同時Abaqus內置的SMA子程序適用于隱式分析和顯示分析。
通過Abaqus模擬得到的SMA單向拉伸載荷位移曲線如下所示
展開 
設計仿真 | 新版本Dytran 用戶子程序調用及案例分享
Dytran編譯器設置
● 系統及所有程序安裝完成后進行開發環境設置:
進入Dytran Explorer界面,點擊Tools下的Options按鈕,進入選項窗口,設置編譯環境所需的組件路徑。
完成路徑設置后即可進行UDS的提交。
案例說明
在液體晃蕩分析過程中,我們通常需要將液體部分的質心進行輸出,以查看其在晃蕩過程中液體對結構狀態的影響,要實現該功能需要通過其EXOUT子程序接口將所有Euler單元的質量及位置坐標進行處理得到整體質心位置并輸出。
將Dytran安裝目錄下/usr-subrtns/文件夾內的dytran_usersub.f子程序源文件作為模板,編輯該文件下的EXOUT子程序,遍歷每個歐拉單元的質量以及質心,通過數據處理后,實現歐拉單元內液體部分質心輸出的功能。
在Dytran Explorer中,在提交作業時,將UDS路徑指向編輯好的Fortran源代碼,點擊RUN按鈕后即可進行作業提交。
程序會首先將源代碼編譯為動態鏈接庫,并在目錄下生成dytran_usersub.dll文件,該文件可以代替子程序源文件,在沒有編譯器的環境下進行子程序的提交。當采用動態鏈接庫進行作業提交時,只能采用CMD形式,具體命令如下:
文章小結
Dytran UDS接口讓用戶方便的實現求解器的二次開發,大大擴充了Dytran的功能,有效提高了Dytran在工程上的通用性。
展開 Abaqus子程序:基礎知識概述1
(2)命名約定
如果用戶子程序調用其他子程序(非用戶子程序)或使用 COMMON 塊傳遞信息,則此類子程序或 COMMON 塊應以字母 K 開頭,因為該字母在 Abaqus 中絕不會用于任何子程序或 COMMON 塊的名稱開頭。
用 C 或 C++ 編寫的用戶子程序將從 Fortran 中調用;因此,它們必須符合 Fortran 調用約定:C 或 C++ 子程序的名稱必須包含在 FOR_NAME 宏中,并且參數必須通過引用傳遞和接收。;例如,
extern “C“ void FOR_NAME(film,FILM) (double & arg1, ...) { ˙˙˙ }
(3)要定義或者更新的變量
用戶子程序必須執行它們的既有的功能,而不覆蓋Abaqus 的其他部分。用戶應當僅僅重新定義如“定義得到的變量”節中確定的那些變量。重新定義“為信息傳遞進的變量”將具有不可預測的影響。
(4)編譯和鏈接問題
如果在編譯或鏈接子程序期間遇到問題,請確保 Abaqus 環境文件(該文件的默認位置是 Abaqus 安裝的 site 子目錄)包含系統自定義參數中指定的正確編譯和鏈接命令。這些命令應由 Abaqus 站點管理員在安裝過程中設置。參數的數量和類型必須與文檔中指定的相對應。參數類型或數量的不匹配可能會導致平臺相關的鏈接或運行時錯誤。
(5)內存分配注意事項
我們的用戶子程序將與 Abaqus 共享內存資源。當需要使用大型數組或其他大型數據結構時,應該動態分配它們的內存,以便從堆而不是堆棧中分配內存。未能動態分配大型數組可能會導致堆棧溢出錯誤并退出 Abaqus 分析。有關使用本機 Fortran 可分配數組進行動態分配的示例,未來我研究明白了再講,實際上大多數情況是不用考慮的。
展開 只會G代碼,不會宏程序就別說你是數控師傅
(5)用M代碼調用子程序
在參數中設置調用子程序(宏程序)的M代碼號,可與子程序調用(M98)相同的方法用該代碼調用宏程序。
說明:
在參數(NO.6071到NO.6079)中設置調用子程序的M代碼(從1到99999999),相應的用戶宏程序(09001到09009)可與M98同樣的方法用該代碼調用。
● 重復,與非模態調用一樣,地址L可以指定從1到9999的重復次數。
● 自變量指定,不允許自變量指定。
● M代碼,在宏程序中調用的M代碼被處理為普通的M代碼。
● 限制:用G代碼調用的宏程序,或用M或T代碼調用的程序中,使用一個M代碼不能調用幾個子程序.這種宏程序或程序中的M代碼被處理為普通的M代碼。
(6)用T代碼調用子程序
在參數中設置調用的子程序(宏程序)的T代碼,每當在加工程序中指定該T代碼時,即調用宏程序。
說明:
● 調用: 設置參數NO.6001的5位TCS=1,當在加工程序中指定T代碼時,可以調用宏程序09000。在加工程序中指定的T代碼賦值到公共變量#149。
● 限制:用G代碼調用的宏程序中或用M或T代碼調用的程序中,一個M代碼不能調用多個子程序。這種宏程序或程序中的T代碼被處理為普通T代碼。
(7)典型程序
用M代碼調用子程序的功能,調用測量每把刀具的累積使用時間的宏程序。
條件:
1)測量T01到T05各把刀具的累積使用時間,刀號大于T05的刀具不進行測量。
2)下面的變量用于貯存刀號和測量的時間。
展開 基于python語言的ANSA二次開發——如何調用python設計的子程序 ¥2
ANSA的二次開發可以借助強大的python語言來實現,具體的開發流程如下:
(1)用python編寫自己所需的操作程序;
(2)建立對應的調用函數的句柄函數;
(3)在ANSA面板上建立關聯句柄函數的面板按鈕;
(4)設置保存相應的ANSA設置參數;
(5)點擊對應的面板按鈕即可運行相應的程序。
一、如何創建圖形界面控制程序腳本
1.新建程序腳本文件,以函數名命名,格式為.py。例如建立腳本TestButton.py。
腳本程序內容如下圖所示: