본문 바로가기
Program/ABAQUS

ABAQUS Subroutine Umat 기초 설명

by 시레엔 2017. 4. 11.
반응형

안녕하세요.

이번 포스팅은 어제에 이어서 ABAQUS SUBROUTINE에 관한 포스팅입니다. 어제 설명드렸던 것과 같이 사용자가 해석툴을 Customization을 시킨다고 생각하시면 될 것 같으며, 이 부분에 있어서는 알고리즘을 형성하는 것이 가장 중요합니다. 실제로 어떤 코딩이든지 알고리즘이 중요하다고 생각합니다. 아무튼 이제 설명을 시작하도록 하겠습니다. 

아래 보이시는 서브루틴 코드는 유투브 검색으로도 쉽게 찾을 수 있는 기본 Umat Code입니다. 이것은 기본적인 탄성이론을 이용하여 적용한 부분이며, IMPLICIT 내에서 사용할 수 있는 코드입니다.


  SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,

     1 RPL,DDSDDT,DRPLDE,DRPLDT,

     2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,

     3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,

     4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,JSTEP,KINC)

C

      INCLUDE 'ABA_PARAM.INC'

C

      CHARACTER*80 CMNAME

      DIMENSION STRESS(NTENS),STATEV(NSTATV),

     1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),

     2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),

     3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3),

     4 JSTEP(4)


위에 있는 것은 ABAQUS Documentation Subroutine에서 복사를 해온 부분입니다.

정의되어진 변수들은 ABAQUS 내에서 계산할때 쓰는 변수라고 생각하시면 될 것 같습니다. 이것들을 통해서 ABAQUS, FORTRAN, ABAQUS의 순서대로 계산이 되어진다는 생각을 하면, 중간 과정의 알고리즘을 사용자의 생각에 맞게 구성을 한다고 생각하면 될 것 같습니다. 그리고 아래에 보이는 부분은 위의 변수를 이용하여 사용자가 알고리즘을 구성 및 변수 불러오기를 하는 과정입니다.


첫번째로, PROPS(1)은 ABAQUS/CAE 또는 ABAQUS input 파일에서 적용한 변수를 불러오는 키워드라고 볼 수 있습니다. 이에 따라 PROPS(1)은 영률, PROPS(2)는 프아송비로 적용이 되는 것을 알 수 있으며, 이 변수를 가지고 LAMDA, MU의 변수를 계산을 해줍니다.


C  

C           Elastic UMAT

C

PARAMETER (ONE=1.d0, TWO=2.d0)

E=PROPS(1); !YOUNG'S MODULUS

NU=PROPS(2); !POSSONS RATE

LAMDA=NU*E/(ONE+NU)*(ONE-TWO*NU); !LAMDA

MU=E/(TWO*(1+NU)); !MU

C

C INITIALIZATION FOR STIFFNESS MATRIX

C

DO X=1, NTENS

DO Y=1, NTENS

DDSDDE(X,Y)=0; !STIFFNESS MATRIX

END DO

END DO


위의 부분은 모든 코딩에서도 적용이 되서, 기존에 경험이 있으신 분들은 빠르게 감을 잡을 수 있으실 것입니다. Dimension으로 정의되어진 값은 모두가 깨끗하게 값이 들어가 있는 것이 아닙니다. 이에 따라서 완전히 비워진 매트릭스를 형성하기 위해서 6x6 행렬의 모든 항에 0의 값을 넣어줍니다. 이 부분이 INITIALIZATION PROCESS입니다.


C

C STIFFNESS FOR ELASTIC

C

DDSDDE(1,1)=NU+TWO*MU;

DDSDDE(2,2)=DDSDDE(1,1);

DDSDDE(3,3)=DDSDDE(1,1);

DDSDDE(2,1)=LAMDA;

DDSDDE(1,2)=LAMDA;

DDSDDE(1,3)=LAMDA;

DDSDDE(3,1)=LAMDA;

DDSDDE(2,3)=LAMDA;

DDSDDE(4,4)=MU;

DDSDDE(5,5)=MU;

DDSDDE(6,6)=MU;


위에 나타난 부분은 STIFFNESS MATRIX COMPONENT를 넣어주는 과정입니다. 상단 부분에서 정의한 LAMDA와 MU를 이용하여 STIFFNESS MATRIX를 정의할 수 있습니다.


C

C STRESS FOR ELASTIC

C

DO X=1, NTENS

DO Y=1, NTENS

STRESS(X)=STRESS(X)+DDSDDE(X,Y)*DSTRAN(Y)

                           !NEW_STRESS=OLD_STRESS+STIFFNESS*STRAIN

END DO

END DO

RETURN

END


마지막으로 STIFFNESS COMPONENT를 넣어준 행렬을 이용하여 STRESS UPDATE를 시키는 과정입니다. 여기서는 기존 응력의 결과에 변형율과 강성의 곱을 통해서 새로운 응력을 도출해낸다는 것을 말하고 있으며, NTENS라는 자유도를 이용하여 DO문을 활성화 시키고 있습니다.


여기까지가 ABAQUS Subroutine의 기본 UMAT 코드에 대한 포스팅입니다.



반응형

댓글