안녕하세요.
오랜만에 ABAQUS에 대한 포스팅을 쓰게 되었습니다. 이번에 소개할 부분은 ABAQUS를 이용한 MAPPING입니다.
기존에도 Stress Mapping하는 과정에 대한 설명을 포스팅을 했었는데, 이번에는 ABAQUS Subroutine을 이용한 Stress Mapping 과정입니다.
ABAQUS Subroutine은 Fortran과 연동하는 과정이므로 실행 전에 모든 부분이 Setting이 되어있어야 합니다. 기존에 설정을 안해두신 분은 Fortran과 Visual Studio를 설치 후에 링크(http://trialso88.tistory.com/22)를 확인하셔서 연동해주시면 될 것 같습니다.
이제 코드와 함께 설명을 드리도록 하겠습니다.
SUBROUTINE SIGINI(SIGMA,COORDS,NTENS,NCRDS,NOEL,NPT,LAYER,
& KSPT,LREBAR,REBARN)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION SIGMA(NTENS),COORDS(NCRDS)
CHARACTER*80 REBARN
먼저 위의 부분은 ABAQUS에서 기본적으로 지정되어있는 변수에 대한 부분입니다. ABAQUS Documentation에서 복사해서 사용한 부분이고, ABAQUS 모든 Subroutine이 위와 같이 이루어지게 됩니다. 또한, INCLUDE에서 'ABA_PARAM.INC'는 Implicit안에서 사용되며, 'VABA_PARAM.INC'는 Explicit 코드 내에서 사용되어지게 됩니다.
C User variable for input
INTEGER NUM_ELEM, NUM_GAUSS,I
REAL SIG(6)
C WRITE(*,*) NOEL,' NUM Gauss',NPT
위 코드는 Stress File을 불러드리기 위해 지정하는 변수입니다. INTEGRATION POINT에서 변수를 뽑을때 엘리먼트 번호, 적분점 번호, 스트레스 1~6번까지 요소에 따라 다르게 뽑히게 됩니다. 예를 들어서 3차원 HEXA 요소 일때 S11, S22, S33, S12, S23, S31 등으로 도출될 수 있다는 점에서 총 6개의 SIG 변수를 지정해줍니다.
I=0
C Read Sigma.txt
10 IF (NTENS.EQ.3) THEN
READ (80,*,ERR=99,END=20) NUM_ELEM,NUM_GAUSS,SIG(1),SIG(2)
& ,SIG(3)
ELSE IF (NTENS.EQ.4) THEN
READ (80,*,ERR=99,END=20) NUM_ELEM,NUM_GAUSS,SIG(1),SIG(2)
& ,SIG(3),SIG(4)
ELSE IF (NTENS.EQ.6) THEN
READ (80,*,ERR=99,END=20) NUM_ELEM,NUM_GAUSS,SIG(1),SIG(2)
& ,SIG(3),SIG(4),SIG(5),SIG(6)
ELSE
WRITE(*,*) 'Sigini',NTENS
GOTO 99
ENDIF
C WRITE(*,*) '2D NUM ELEM',NUM_ELEM,NOEL,' NUM Gauss',NUM_GAUSS,NPT
NUM_ELEM, NUM_GAUSS와 같은 변수를 설정함에 따라 위의 코드에서 TXT파일을 불러올 형식에 맞춰 써주게됩니다. NTENS라는 부분은 Stress의 번호라고 생각하시면 이해하기가 쉬우실것이며, 이에 따라 3개의 Stress일때, 4개의 Stress, 6개의 Stress 일때를 각각 설정해줘서 IF문으로 어느 상황이든 Subroutine이 적용될 수 있게 설정하였습니다.
IF (NUM_ELEM.EQ.NOEL.AND.NUM_GAUSS.EQ.NPT) THEN
IF (NTENS.EQ.3) THEN
SIGMA(1)=SIG(1)
SIGMA(2)=SIG(2)
SIGMA(3)=SIG(3)
ELSE IF (NTENS.EQ.4) THEN
SIGMA(1)=SIG(1)
SIGMA(2)=SIG(2)
SIGMA(3)=SIG(4)
SIGMA(4)=SIG(3)
ELSE IF (NTENS.EQ.6) THEN
SIGMA(1)=SIG(1)
SIGMA(2)=SIG(2)
SIGMA(3)=SIG(3)
SIGMA(4)=SIG(4)
SIGMA(5)=SIG(5)
SIGMA(6)=SIG(6)
ENDIF
GOTO 99
ELSE
GOTO 10
ENDIF
이후에 NTENS의 갯수와 부합되는 IF문에 들어가서 Stress를 업데이트하는 과정이 설명되어져 있습니다. 이 부분까지만 최종적으로 이해하신다면, 기본 코드 SIGINI에 대해 쉽게 적용하실 수 있을 것이라고 생각합니다.
20 IF(I.EQ.0) THEN
REWIND(80)
C WRITE (*,*) 'Rembobinage',NOEL
I=I+1
GOTO 10
ELSE
WRITE (*,*) 'Sigini: Element',NOEL,' Not found', NPT
GOTO 99
ENDIF
99 CONTINUE
END
전체적으로 이해하기 쉽게 쓴다고 했는데, 이걸 보시고 제대로 이해하실 수 있는지 모르겠네요.
만약에 추가적으로 더 알고 싶은 부분이 있다고 하시면, 업데이트를 해서 보충할 수 있도록 하겠습니다. 여기까지해서 ABAQUS Subroutine SIGINI에 대한 설명을 마치겠습니다.
'Program > ABAQUS' 카테고리의 다른 글
Johnson-Cook Damage Model 설명 (0) | 2017.05.19 |
---|---|
ABAQUS CONTACT 계산 (0) | 2017.05.12 |
ABAQUS Subroutine Umat 기초 설명 (4) | 2017.04.11 |
ABAQUS Subroutine이란? (0) | 2017.04.10 |
ABAQUS Implicit과 Explicit 해석 (6) | 2017.04.09 |
댓글