사용자 서브루틴 확장¶
FrontISTR는 본체 소스를 수정하지 않고 기능을 확장하기 위한 사용자 서브루틴군을 제공한다. 대상은 구성법칙의 사용자 구현과 사용자 정의 외부 하중의 통합이다. 이 장에서는 확장 가능한 지점과 각각을 호출하기 위한 해석 제어 파일의 키워드를 정리한다. 서브루틴 인수의 상세 사양과 재빌드 절차는 사용자 서브루틴(코딩 가이드)을 참조한다.
기능 개요¶
사용자 서브루틴에 의한 확장 지점은 재료 구성법칙과 외부 하중의 두 계통으로 나뉜다. 구성법칙 측에는 선형 탄성, 초탄성, 탄소성 및 범용 구성법칙의 네 가지 호출 경로가 있으며 각각 독립된 키워드로 기동한다. 외부 하중 측에는 사용자가 준비한 외부 파일에서 하중 정보를 읽어 전역 하중 벡터 및 잔차 벡터에 더하는 경로가 제공된다. 어느 경우든 FrontISTR 배포물에 포함된 템플릿 파일을 편집한 후 본체를 재빌드하면 사용할 수 있다.
| 확장 카테고리 | 해석 제어 키워드 | 주요 사용자 서브루틴 | 편집 대상 템플릿 |
|---|---|---|---|
| 사용자 선형 탄성 | !ELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| 사용자 초탄성 | !HYPERELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| 사용자 탄소성(항복 함수·리턴 매핑) | !PLASTIC, YIELD=USER |
uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus |
fistr1/src/lib/user/uyield.f90 |
| 범용 사용자 구성법칙 | !USER_MATERIAL |
uMatlMatrix, uUpdate |
fistr1/src/lib/user/umat.f90 |
| 사용자 정의 외부 하중 | !ULOAD, FILE=<fname> |
ureadload, uloading, uResidual |
fistr1/src/lib/user/uload.f90 |
사용자 경화법칙(항복 함수는 내장된 것을 그대로 두고 경화 곡선만 사용자 구현으로 바꾸는 경로)은 지원하지 않는다. 경화 곡선을 사용자 구현해야 하는 경우 !PLASTIC, YIELD=USER를 선택하고 탄소성 구성법칙 전체를 사용자 구현으로 대체한다. 사용자 경계 조건 및 리스타트 시 사용자 처리를 위한 확장 지점도 지원하지 않는다.
!CREEP의 TYPE=USER는 지원하지 않는다. 시간 의존 구성법칙을 사용자 구현하는 경우 !USER_MATERIAL을 사용한다.
사용자 구성법칙¶
사용자 구성법칙은 내장 재료 모델로 표현할 수 없는 응력-변형률 관계를 외부 서브루틴으로 구현하기 위한 진입점이다. 대응하는 내장 구성법칙의 틀에 맞추어 사용자 선형 탄성, 사용자 초탄성, 사용자 탄소성, 범용 사용자 구성법칙의 네 가지 경로가 있다. 어느 경로에서도 해석 제어 데이터의 !MATERIAL 블록 안에서 대응 키워드에 TYPE=USER 또는 YIELD=USER를 붙인다. 사용자 상수는 최대 100개까지 지정할 수 있으며 서브루틴 측으로 전달된다.
사용자 선형 탄성¶
사용자 선형 탄성은 미소변형의 틀에서 탄성 행렬을 사용자가 계산하는 경로이다. 해석 제어 데이터 측에서 !ELASTIC, TYPE=USER를 지정하면 FrontISTR는 이를 미소변형 구성법칙으로 취급하며, 요소 강성 계산 시 uElasticMatrix(탄성 행렬 \(D\)를 반환)와 응력 갱신 시 uElasticUpdate(응력을 반환)를 호출한다. 기존 초탄성 모델이나 탄소성 모델과 함께 사용하지 않는다.
사용자 초탄성¶
사용자 초탄성은 대변형(Total Lagrange) 틀에서 변형 에너지 함수의 미분으로부터 응력과 접선 강성을 계산하는 경로이다. 해석 제어 데이터 측에서 !HYPERELASTIC, TYPE=USER를 지정한다. 호출되는 서브루틴은 사용자 선형 탄성과 같은 uElasticMatrix 및 uElasticUpdate이며 템플릿도 fistr1/src/lib/user/uelastic.f90을 공유한다. 키워드 측 지정에 따라 FrontISTR가 미소변형으로 취급할지 Total Lagrange로 취급할지가 전환되므로 같은 템플릿을 미소변형용과 대변형용 양쪽에 동시에 사용할 수 없다. 둘 중 하나의 구성법칙으로 구현한다.
사용자 탄소성¶
사용자 탄소성은 항복 함수 및 리턴 매핑(return-mapping) 절차를 사용자가 구현하는 경로이다. 해석 제어 데이터 측에서 !PLASTIC, YIELD=USER를 지정한다. Mises, Mohr-Coulomb, Drucker-Prager의 각 내장 항복 함수와 독립된 분기로 들어가며, 요소 강성 계산에서 uElastoPlasticMatrix(탄소성 접선 강성 \(D\)를 반환), 응력 갱신에서 uBackwardEuler(시험 응력을 실제 응력으로 매핑하고 상태 변수를 갱신), 가우스점 초기화 시 uElastoPlasticNumStatus(유지할 실수 상태 변수의 개수를 반환)가 호출된다. 경화 곡선만 사용자 구현으로 대체하는 경로는 지원하지 않는다. 경화 곡선만 사용자 구현해야 하는 경우에도 이 경로에서 탄소성 구성법칙 전체를 사용자 구현으로 대체한다.
범용 사용자 구성법칙¶
범용 사용자 구성법칙은 탄성·초탄성·탄소성의 틀에 들어맞지 않는 구성법칙을 일괄적으로 구현하는 경로이다. 해석 제어 데이터 측에서 !USER_MATERIAL을 지정한다. 기본적으로 Updated Lagrange 법의 틀에서 취급하며 KIRCHHOFF 지정이 있으면 Total Lagrange 법으로 취급한다. 상태 변수의 개수는 NSTATUS로 지정한다. 요소 강성 계산에서 uMatlMatrix(접선 강성 \(D\)를 반환), 응력 갱신에서 uUpdate(응력과 상태 변수를 갱신)가 호출된다.
사용자 상수와 상태 변수의 전달¶
!ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER, !USER_MATERIAL의 어느 경로에서도 해석 제어 데이터의 데이터 행에 쓴 사용자 상수(최대 100개)는 그대로 서브루틴의 matl 인수로 전달된다. !PLASTIC, YIELD=USER에서는 !ELASTIC로 지정한 탄성 상수와 함께 !PLASTIC의 데이터 행을 통해 주는 사용자 상수가 전달된다.
범용 사용자 구성법칙 및 !PLASTIC, YIELD=USER에서는 상태 변수 fstat을 통해 이전 스텝의 이력 정보(소성 변형률·배응력·손상량 등)를 사용자 구현으로 전달하고 스텝 종료 시 다시 기록할 수 있다. 상태 변수의 개수는 범용 사용자 구성법칙에서는 !USER_MATERIAL의 NSTATUS로, !PLASTIC, YIELD=USER에서는 uElastoPlasticNumStatus의 반환값으로 결정된다.
사용자 정의 외부 하중¶
사용자 정의 외부 하중은 내장 집중 하중·분포 하중·체적력으로 표현할 수 없는 외력을 사용자 서브루틴으로 정의하는 경로이다. 해석 제어 데이터에 !ULOAD, FILE=<fname>를 기술하면 FrontISTR는 지정된 파일명을 ureadload에 전달하고, 사용자 구현이 읽은 정보를 모듈 내 데이터로 유지한다.
!ULOAD의 기동에는 다음 세 개의 서브루틴이 대응한다.
ureadload: 해석 시작 시 제어 파일에서 지정된 외부 파일로부터 사용자 정의 하중을 읽는다. 사용자 구현 측에서 파일을 열고 필요한 데이터를 모듈 내 변수에 저장한다.uloading: 각 스텝의 외부 하중 벡터 조립 시 호출되며 전역 하중 벡터에 사용자 하중을 더한다. 현재 스텝 번호와 하중 계수가 인수로 전달된다.uResidual: 각 반복에서 잔차 벡터를 조립할 때 호출되며 전역 잔차 벡터에 사용자 하중의 기여를 더한다. 비선형 반복 및 평형 계산 양쪽에서 호출된다.
사용자 경계 조건(지정 변위·접촉 조건의 사용자 확장)에 대응하는 확장 지점은 제공되지 않는다. 외력 이외의 사용자 확장이 필요한 경우 대응하는 내장 키워드 또는 사용자 구성법칙 경로를 사용한다.
사용자 서브루틴 구현 절차¶
사용자 서브루틴을 이용하려면 FrontISTR 소스 배포물에 포함된 템플릿 파일을 편집한 후 FrontISTR 본체를 재빌드한다. 배포 바이너리에서는 사용자 서브루틴을 교체할 수 없으므로 사용자 확장을 사용할 경우 소스에서 빌드할 수 있는 환경을 준비한다.
사용자 서브루틴 템플릿은 fistr1/src/lib/user/ 아래에 있으며 확장 카테고리별로 편집할 파일이 정해져 있다(파일명은 기능 개요의 표 참조). 어느 파일이든 초기 상태에서는 서브루틴 본체가 비어 있거나 선형 탄성 샘플 구현이 들어 있으며, 사용자는 여기에 자신의 구성법칙·하중 정의를 추가한다. 템플릿을 편집한 후 FrontISTR 본체를 평소와 같이 CMake로 재빌드하고 생성된 fistr1 실행 파일로 해석을 실행한다.
서브루틴 인수의 의미, 상태 변수 배열의 취급, 재빌드 시 주의점 등의 자세한 내용은 코딩 가이드의 각 페이지에 나뉘어 있다.
관련 항목¶
- 재료 데이터 — 구성법칙 선택지와 내장 모델 목록
- 경계 조건·하중 — 내장 경계 조건·하중
- 사용자 서브루틴(코딩 가이드) — 서브루틴 인수 사양과 구현 규약
- !USER_MATERIAL — 범용 사용자 구성법칙의 키워드 형식
- !ELASTIC —
TYPE=USER를 포함하는 선형 탄성 키워드 - !HYPERELASTIC —
TYPE=USER를 포함하는 초탄성 키워드 - !PLASTIC —
YIELD=USER를 포함하는 탄소성 키워드