abaqus的Vgetvrm所提取的第一主應力為什么等于0? 20
具體程序段如下:
call vgetvrm( 'SP', rData, jData, cData, jStatus )
SIG1(K)=RDATA(K) 輸出值為0
call vgetvrm( 'SP', rData, jData, cData, jStatus )
SIG1(K)=RDATA(2*NBLOCK+K) 有輸出值
看完兵哥的視頻后就在想是不是2022版本abaqus的主應力也是
S1 S1 S1......NBLOCK
S2 S2 S2......NBLOCK
S3 S3 S3......NBLOCK
或者是
S3 S3 S3......NBLOCK
S2 S2 S2......NBLOCK
S1 S1 S1......NBLOCK
試過了SIG1(K)=RDATA(K),但這樣輸出是0
如果通過提取主應力的那個子程序或者直接提取應力分量自己算,又會出現云圖顯示不全(大部分區域為黑色,少部分為彩色)的問題,abaqus2022我看幫助文件已經可以用vgetvrm提取了。。。。
最后附上能算的程序,但損傷值一直輸出為0
NCL損傷模型
subroutine vusdfld(
c Read only variables -
1 nblock, nstatev, nfieldv, nprops, ndir, nshr,
2 jElem, kIntPt, kLayer, kSecPt,
3 stepTime, totalTime, dt, cmname,
4 coordMp, direct, T, charLength, props,
5 stateOld,
c Write only variables -
6 stateNew, field )
c
include 'vaba_param.inc'
c
dimension jElem(nblock), coordMp(nblock,*),
1 direct(nblock,3,3), T(nblock,3,3),
2 charLength(nblock), props(nprops),
3 stateOld(nblock,nstatev),
4 stateNew(nblock,nstatev),
5 field(nblock,nfieldv)
character*80 cmname
c
c Local arrays from vgetvrm are dimensioned to
c maximum block size (maxblk)
c
parameter( nrData=6 )
character*3 cData(maxblk*nrData)
dimension rData(maxblk*nrData), jData(maxblk*nrData)
real*8 s(NBLOCK,NDIR+NSHR),SIG1(NBLOCK)
real*8 eigVal(NBLOCK,3)
real*8 Xdamg(NBLOCK),XDD(NBLOCK),SEQ(NBLOCK),SEQE(NBLOCK)
REAL*8 DSEQE(NBLOCK)
c
do k = 1, nblock
C 提取米賽斯等效應力(親測abaqus2022版本可以)
call vgetvrm( 'MISES', rData, jData, cData, jStatus )
SEQ(K)=rData(K)
C 提取主應力(最搞不清楚這個)
call vgetvrm( 'SP', rData, jData, cData, jStatus )
SIG1(K)=RDATA(K)
STATENEW(K,4)=SIG1(2*NBLOCK+K)
C 計算等效應變(vgetvrm無法提取總應變E,只能提取塑性應變或者對數應變(真實應變)幫助文檔里沒
C 寫,但試了下有值,但為了避免出錯還是采用LE)
call vgetvrm( 'LE', rData, jData, cData, jStatus )
EE1=rDATA(K)
EE2=rDATA(K+NBLOCK)
EE3=rDATA(K+2*NBLOCK)
EE4=rDATA(3*NBLOCK+K)
EE5=rDATA(4*NBLOCK+K)
EE6=rDATA(5*NBLOCK+K)
C 計算當前步等效應變
SEQE(K)=sqrt(((EE1-EE2)**2+(EE2-EE3)**2+ (EE1-EE3)**2+
1 6*(EE4**2+EE5**2+EE6**2))*(2.0d0/9.0D0))
C 計算等效應變增量,用分析步結束后的值-前的值
DSEQE(K)=SEQE(K)-STATEOLD(K,3)
C 存儲當前步等效應變
STATENEW(K,3)=SEQE(K)
C 導入上一步損傷值
XDAMG(K)=STATEOLD(K,2)
C 若最大主應力小于等于0,則不增加損傷值。
if(SIG1(k).LE.0)then
xdamg(k)=STATEOLD(K,2)
else
C 當前步損傷值=上一步損傷值+最大主應力*等效應變增量/等效應力
XDAMG(K)=XDAMG(K)+SIG1(K)*DSEQE(K)/SEQ(K)
endif
C 更新損傷狀態變量
STATENEW(K,2)=XDAMG(K)
C 若損傷狀態變量大于等于0.58則刪除單元
IF( STATENEW(K,2).GE.0.58)THEN
STATENEW(K,1)=0.0
ELSE
STATENEW(K,1)=1.0
ENDIF
ENDDO
c
return
end





















樓主解決了嘛?我現在也遇到這個問題