» 블로그 » 블로그 » 아바쿠스 유익스터널디비 서브루틴 | 단계별 가이드

아바쿠스 유익스터널디비 서브루틴 | 단계별 가이드

In this article you will read

목차

Main Article

Last updated on:

Abaqus에서 복잡한 시뮬레이션을 작업할 때 내장 도구만으로는 충분하지 않은 경우가 종종 발생합니다. 이전 실행 데이터를 통합하거나, 외부 데이터 세트를 입력하거나, 추가 분석을 위해 시뮬레이션 결과를 저장하는 경우, 바로 이 부분에서 Abaqus를 활용해야 합니다. UEXTERNALDB 서브루틴 빛난다.

이 완벽한 가이드에서는 이 강력한 사용자 서브루틴에 대해 알아야 할 모든 것을 설명합니다. 무엇을 하는지, 왜 중요한지, 어떻게 마스터할 수 있는지 알려드립니다.

What is Abaqus UEXTERNALDB​ Subroutine and when it’s used?

UEXTERNALDB 사용자 서브루틴은 분석 시작 시, 각 증분 시작 시, 각 증분 종료 시, 분석 종료 시에 호출됩니다.

이 서브루틴은 ABAQUS/Standard 내에서 다른 소프트웨어와 사용자 서브루틴 간의 통신을 원활하게 합니다. 해석 시작 시 다른 사용자 서브루틴에서 필요로 하는 외부 파일을 열 수 있도록 하고, 해석 종료 시 해당 파일을 닫도록 합니다.

또한, 각 증분의 시작 부분에서 과거 데이터를 계산하거나 검색하는 데 활용할 수 있으며, 이후 분석 중에 다른 사용자 서브루틴에서 사용할 수 있도록 해당 데이터를 사용자 정의 COMMON 블록 변수나 외부 파일에 저장할 수 있습니다.

Why Use UEXTERNALDB Subroutine?

  • 주요 사용 사례
    • 이전 실행의 데이터로 시뮬레이션 초기화
    • 내부 변수(예: 균열 길이, 손상 지수)의 진화 기록
    • 결합된 시뮬레이션 또는 공동 시뮬레이션 환경 간 데이터 전송
  • Python 스크립팅과 같은 다른 방법에 비해 이점

UEXTERNALDB는 사전 및 사후 처리에만 국한되는 Python 스크립팅과 달리 시뮬레이션 내에서 실시간 데이터 교환을 지원합니다. 지속적인 데이터 추적, 외부 프로그램 또는 데이터베이스와의 원활한 통신, 그리고 시뮬레이션 프로세스 전반에 걸친 동적 제어를 보장합니다.

How UEXTERNALDB Works: Behind the Scenes

UEXTERNALDB 서브루틴은 시뮬레이션 작업의 특정 단계에서 Abaqus와 상호 작용하는 사용자 정의 진입점입니다. 핵심 모델 파일을 수정하지 않고도 시뮬레이션 환경과 외부 데이터 소스, 도구 또는 스크립트 간의 통신을 가능하게 합니다.

데이터 흐름 및 상호 작용

  • 입력: UEXTERNALDB는 재료 속성, 경계 조건, 지오메트리 매개변수 또는 사용자 정의 메타데이터와 같은 데이터를 읽거나 씁니다. 이러한 데이터는 일반적으로 외부 파일(예: CSV, 텍스트, 데이터베이스)에 저장되거나 사용자 로직을 통해 전달됩니다.
  • 산출: 서브루틴은 처리된 입력, 결과 또는 로그를 외부 저장소에 다시 기록하여 자동 추적을 활성화하거나 다른 도구(예: 최적화 프레임워크 또는 ML 파이프라인)와 결합할 수 있습니다.
  • 제어 흐름: 플래그와 변수(LOP, STEP, TIME 등)를 기반으로 서브루틴은 각 단계에서 어떤 논리를 실행할지 결정합니다.

분석 중에 호출되는 타이밍

Abaqus는 분석 라이프사이클의 사전 정의된 지점에서 UEXTERNALDB를 호출합니다.

베다

LOP=0 분석 시작 시 서브루틴이 호출됨을 나타냅니다.

LOP=1 현재 분석 증분의 시작 부분에서 서브루틴이 호출됨을 나타냅니다. 증분이 수렴하지 못하고 더 작은 시간 증분이 필요한 경우, 분석 증분의 시작 부분에서 서브루틴을 여러 번 호출할 수 있습니다.

LOP=2 현재 분석 증분의 끝에서 서브루틴이 호출됨을 나타냅니다. LOP=2인 경우, 분석을 다시 시작하는 데 필요한 모든 정보는 외부 파일에 기록됩니다.

LOP=3 분석이 끝나면 서브루틴이 호출된다는 것을 나타냅니다.

LOP=4 재시작 분석 시작 시 서브루틴이 호출됨을 나타냅니다. LOP=4인 경우, 필요한 모든 외부 파일을 열고 적절한 위치에 배치해야 하며, 재시작에 필요한 모든 정보를 외부 파일에서 읽어야 합니다.

위의 설명은 아래 표에 요약되어 있습니다.

LOP 값 설명
0 서브루틴은 다음에서 호출됩니다. 분석 시작.
1 서브루틴은 다음에서 호출됩니다. 현재 분석 증가의 시작. 증가가 실패하고 더 작은 시간 증가가 필요한 경우 여러 번 호출될 수 있습니다.
2 서브루틴은 다음에서 호출됩니다. 현재 분석 증가의 끝. 재시작에 필요한 모든 정보는 외부 파일에 기록되어야 합니다.
3 서브루틴은 다음에서 호출됩니다. 분석의 끝.
4 서브루틴은 다음에서 호출됩니다. 재시작 분석 시작. 외부 파일을 열어서 읽어서 필요한 재시작 정보를 검색해야 합니다.

Basic Syntax and Structure of a UEXTERNALDB Subroutine

사용자 UEXTERNALDB 서브루틴 인터페이스 Fortran 코드는 그림 1에 나와 있습니다. 일반적으로 시작하는 템플릿은 다음과 같습니다.

uexternaldb​ 서브루틴 인터페이스

그림 1: UEXTERNALDB 서브루틴 인터페이스

정의할 변수

없음.

정보를 위해 전달된 변수

  • 베다
    • LOP=0은 분석 시작 시 서브루틴이 호출됨을 나타냅니다.
    • LOP=1은 현재 분석 증분의 시작 부분에서 서브루틴이 호출됨을 나타냅니다. 증분이 수렴하지 못하고 더 작은 시간 증분이 필요한 경우, 분석 증분의 시작 부분에서 서브루틴을 여러 번 호출할 수 있습니다.
    • LOP=2는 현재 분석 단계가 끝날 때 서브루틴이 호출됨을 나타냅니다. LOP=2인 경우, 분석을 다시 시작하는 데 필요한 모든 정보는 외부 파일에 기록됩니다.
    • LOP=3은 분석이 끝날 때 서브루틴이 호출된다는 것을 나타냅니다.
    • LOP=4는 재시작 분석 시작 시 서브루틴이 호출됨을 나타냅니다. LOP=4인 경우, 필요한 모든 외부 파일을 열고 적절한 위치에 배치해야 하며, 재시작에 필요한 모든 정보를 외부 파일에서 읽어와야 합니다.
  • 재시작
    • LRESTART=0은 이 증가에 대해 분석 재시작 파일이 작성되지 않음을 나타냅니다.
    • LRESTART=1은 이 증가분에 대해 분석 재시작 파일이 작성되고 있음을 나타냅니다.
    • LRESTART=2는 이 증분에 대해 분석 재시작 파일이 작성되고 단계당 하나의 증분만 유지되므로 현재 증분이 재시작 파일의 이전 증분을 덮어쓰게 됨을 나타냅니다(ABAQUS 분석 사용자 매뉴얼의 섹션 9.1.1 "분석 재시작" 참조).
  • 시간(1)

현재 단계 시간의 값입니다.

  • 시간(2)

현재 총 시간의 값입니다.

단계, 증가, 그리고 단계 시간의 개념을 살펴보겠습니다. '단계'라는 용어는 당면한 문제를 해결하기 위해 수립하는 분석적 접근 방식을 나타냅니다. 이는 단일 단계 또는 일련의 단계를 포함할 수 있습니다. 더 자세한 내용은 다음 문서를 참조하세요. “"Abaqus DLOAD 및 VDLOAD 서브루틴에 대한 단계별 가이드"”

  • 디타임

시간 증가.

  • 케이스테프

현재 단계 번호입니다. LOP=4일 때, KSTEP은 재시작 단계 번호를 제공합니다. 

  • 킨크

현재 증가 번호입니다. LOP=4일 때, KINC는 재시작 증가 번호를 제공합니다.

A Practical Example: Saving and Reading Custom Data

이 섹션에서는 UEXTERNALDB 서브루틴을 사용하여 ABAQUS에서 데이터를 가져오거나 내보내는 방법에 대해 알아보겠습니다.

문제 설명:

다음은 해당 서브루틴을 사용하는 방법을 보여주는 예입니다. 아래 그림과 같이 10개의 요소로 구성된 객체가 있다고 가정해 보겠습니다. 각 요소는 고유한 강도나 영 모듈 등을 갖는다고 가정해 보겠습니다.

10개의 요소가 결합된 객체

그림 2: 10개의 요소로 메시된 객체

필요한 데이터를 .inp, .dat 또는 .txt 파일로 이미 저장했다고 가정하고, 이제 해당 데이터를 ABAQUS로 가져오려고 합니다.

방법은 다음과 같습니다.

먼저, 특정 데이터 파일을 열어야 합니다. 예를 들어, 파일이 다음 위치에 저장되어 있다고 가정해 보겠습니다.

C:\Users\txt1.dat.

이 파일에서 데이터를 로드하고 코드에서 파일 번호 15로 참조합니다. 또한, 파일이 디렉토리에 이미 있는지 여부와 관계없이 ABAQUS가 계속 진행하도록 알려주는 UNKNOWN 상태 값을 사용합니다.

필요한 명령어:

OPEN (15, 파일="C:\\Users\\txt1.dat", 상태="알 수 없음", 양식="포맷됨", iostat=오류) 앞서 언급한 명령들을 UEXTERNALDB 서브루틴 내에서 사용할 것입니다. 이 서브루틴은 매우 간단하지만, 한 가지 중요한 점을 명심해야 합니다.

UEXTERNALDB 서브루틴은 각 분석, 증분 또는 단계의 시작 시 한 번 호출됩니다. 또한 외부 파일을 열거나, 히스토리 데이터를 읽거나, 쓰는 데에도 사용할 수 있습니다.

이 서브루틴의 핵심 부분은 LOP 변수입니다. LOP는 Abaqus에 파일을 언제 열고, 읽고, 쓸지 알려주는 정수입니다.

예를 들어, 분석 시작 시에만 데이터를 읽거나 가져오고 각 증분 동안 메모리를 사용하지 않으려면 LOP = 0으로 설정합니다. 이는 분석에 증분이 많을 때 유용합니다. 모든 증분에서 파일을 읽으면 메모리가 반복적으로 할당되기 때문입니다.

또는 LOP = 1로 설정하면 모든 단계의 시작 부분에서 파일을 읽고, LOP = 2로 설정하면 모든 증분의 끝 부분에서 파일을 읽거나 씁니다. 파일에 액세스하려는 시점에 따라 이와 같이 설정됩니다.

이제 앞서 논의했던 예제 문제에 대한 데이터를 가져오는 방법을 살펴보겠습니다.

서브루틴을 계속 진행하면서 .dat 파일의 내용을 보여드리겠습니다. 이 파일에는 좌표를 기반으로 한 요소의 강도 값이 포함되어 있습니다.

데이터 파일의 내용

그림 3: 데이터 파일의 내용

예를 들어, 그림 2에서 볼 수 있듯이, 요소 1~5는 한쪽에 정렬되고, 요소 6~10은 다른 쪽에 정렬됩니다. (그림 2 참조)

첫째, 요소 1, 2, 3, 4 및 5는 다음으로부터 강도 값을 갖습니다. 첫 번째 열, 그림 3에 표시된 대로 다른 요소(6, 7, 8, 9 및 10)는 다음에서 강도 값을 사용합니다. 두 번째 열 그림 3에서.

다음으로, 우리는 업데이트된 것을 구현할 것입니다. 외부DB 서브루틴:

UEXTERNALDB 서브루틴 예제

그림 4: UEXTERNALDB 서브루틴 예제

먼저, 데이터를 저장할 행렬을 정의합니다. 이 경우 그림 3과 같이 5×2 행렬입니다. 그런 다음 이 행렬을 1×10 배열로 변형합니다.

UMAT과 같은 서브루틴은 요소 번호를 직접 받기 때문입니다. 따라서 예를 들어 요소가 100개라면, 각 위치가 특정 요소에 해당하는 1×100 배열을 사용하여 데이터를 관리하는 것이 훨씬 쉽습니다.

이렇게 재구성된 형식을 사용하면 원소별 강도나 속성을 나타내는 "randomSigma" 및 "randomSigma2"와 같은 값을 더 쉽게 가져올 수 있습니다. (그림 4의 5번째 줄 참조)

다른 서브루틴에서는 다음을 생성해야 합니다. 공통 블록 이 데이터를 행렬에 저장합니다. 이 행렬을 행렬이라고 부릅니다.

다음으로, 우리는 설정합니다 LOP = 0 ABAQUS가 입력 데이터를 읽도록 하려면 분석 시작 시 단 한 번만.

이를 위해 다음을 사용합니다. 열려 있는 특정 데이터 파일에 대해 파일 번호 15를 사용하는 명령입니다. 실제 파일 번호는 서브루틴 전체에서 일관성을 유지하는 한 크게 중요하지 않습니다.

이 명령의 중요한 부분은 키워드입니다. 아이오스타트, 파일 작업 상태를 보고합니다. 예를 들어, IOSTAT = 0이면 오류 없이 파일을 성공적으로 읽었음을 의미합니다.

iostat 키워드

그림 5: iostat 키워드

다음으로, "randomSigma" 행렬을 "randomSigma2"로 재구성합니다. 이를 위해 다음을 사용합니다. 재형성하다 다음 형식으로 함수를 실행합니다.

보시다시피, 재형성하다 함수는 randomSigma 행렬을 다음과 같이 변경합니다. 5×2 크기를 randomSigma2로 변환합니다. 1×10. (그림 5 21번째 줄 참조)

다음으로, Windows에서 제공한 경로를 사용하여 Abaqus가 데이터 파일을 읽도록 하겠습니다.

Abaqus를 사용하려면 다음을 사용해야 합니다. 이중 백슬래시(\) 파일 경로에 단일 백슬래시 대신 사용합니다. 예: C:\\Users\\YourFolder\\txt1.dat

다음으로, 입력 데이터를 사용하기 위해 UMAT 서브루틴 내의 "randomSigma2" 변수에 저장하고 "statev" 배열에 저장합니다.

statev 배열

그림 6: statev 배열

10개의 요소 또는 10개의 측정값에 대한 데이터가 있습니다. Abaqus는 요소의 개수를 UMAT 서브루틴에 전달하고, UMAT은 randomSigma2 행렬에서 해당 값을 읽습니다. 이 값들은 xfx 매개변수에 할당됩니다. statev 배열을 사용하여 이 데이터를 저장하고 표시합니다. 시뮬레이션을 실행하면 다음 그림과 같이 statev(1) 매개변수에 이 값들이 올바르게 할당되었는지 확인할 수 있습니다.

UEXTERNALDB 예제 결과

그림 7: UEXTERNALDB 예제 결과

Common Pitfalls and Debugging Tips

UEXTERNALDB 구현은 특히 컴파일 또는 런타임 문제를 처리할 때 까다로울 수 있습니다. 다음은 일반적인 함정과 해결 방법입니다.

컴파일 및 연결 문제

  • 컴파일러 호환성: Abaqus 버전에서 지원하는 컴파일러(예: Intel Fortran)를 사용하고 있는지 확인하세요.
  • 환경 설정: 환경 변수(예: ABAQUS_FORT_COMPILER)가 올바르게 구성되었는지 확인합니다.
  • 누락된 기호: 모든 서브루틴과 라이브러리가 올바르게 선언되고 링크되었는지 확인하세요. 일관된 명명 규칙을 사용하세요.
  • 정적 링크와 동적 링크: 특히 외부 라이브러리나 DLL에 링크할 때 플랫폼별 차이점을 알고 있어야 합니다.

일반적인 논리적 오류와 이를 추적하는 방법

  • 잘못된 파일 경로: 디버그 인쇄 명령문을 사용하여 런타임에 파일 위치와 이름을 확인합니다.
  • 초기화되지 않은 변수: 예측할 수 없는 동작을 방지하려면 모든 변수를 명시적으로 초기화하세요.
  • 잘못된 단계/단계 실행: LOP 및 TIME 변수를 사용하여 서브루틴이 분석의 어느 단계에 있는지 확인합니다.
  • 침묵의 실패: 서브루틴이 예상대로 동작하지 않으면 로그 메시지를 삽입하거나 외부 파일에 디버그 정보를 씁니다.
  • 데이터 유형 불일치: 정수형과 실수형의 정밀도를 신중하게 비교하세요. 함수 호출 전체에서 일관된 유형을 사용하세요.

팁: 간단하게 시작하세요. 확장하기 전에 최소한의 동작 예제로 테스트해 보세요. 이렇게 하면 문제를 더 쉽게 분리하고 구현에 대한 확신을 가질 수 있습니다.

Best Practices for Writing Efficient UEXTERNALDB Code

효율적인 UEXTERNALDB 코드 작성은 견고하고 확장 가능한 시뮬레이션 워크플로를 유지하는 데 중요합니다. 성능과 유지 관리성을 보장하기 위한 모범 사례는 다음과 같습니다.

파일 처리

  • 절대 경로를 사용하세요 또는 파일 접근 문제를 방지하기 위해 환경 변수를 기반으로 한 상대 경로를 사용합니다.
  • 필요할 때만 파일을 엽니다, 파일 잠금이나 메모리 누수를 방지하려면 즉시 닫으세요.
  • 중복된 읽기/쓰기를 방지하세요, 특히 대규모 모수적 연구에서는 더욱 그렇습니다. 가능하면 버퍼 데이터를 사용하세요.

성능 팁

  • I/O 작업 최소화 루프 내부 또는 대규모 시뮬레이션; 워크플로 초기에 데이터를 미리 로드하거나 캐시합니다.
  • 서브루틴 프로파일링 타이머나 가벼운 로그를 사용하여 병목 현상을 식별합니다.
  • 이진 또는 구조화된 파일 형식을 사용하세요 (예: HDF5, CSV) 대용량 데이터 세트의 경우 읽기/쓰기 작업 속도를 높입니다.

모듈화

  • 재사용 가능한 서브루틴으로 논리 분리 (예: 데이터 읽기, 매개변수 처리, 출력 로깅).
  • 의미 있는 변수 이름과 주석을 사용하세요 코드 가독성을 높이고 디버깅 시간을 단축합니다.
  • 구성 캡슐화 (예: 파일 경로, 상수)를 단일 모듈로 통합하여 향후 업데이트를 용이하게 합니다.

효율적인 UEXTERNALDB 코드는 시뮬레이션 속도를 높일 뿐만 아니라 워크플로우를 디버깅, 확장하고 여러 팀 간에 공유하기 쉽게 만들어줍니다.

Advanced Use Cases

UEXTERNALDB 서브루틴은 외부 도구 및 고급 자동화와의 원활한 통합을 통해 Abaqus 기능을 확장합니다. 이 서브루틴이 탁월한 두 가지 주요 영역은 다음과 같습니다.

  • 외부 도구 또는 데이터베이스와의 결합
  • 재료 속성 검색 중앙 데이터베이스에서.
  • 자동 로깅 추적을 위한 입력/출력 데이터.
  • 디자인 도구와의 통합 DoE 프레임워크나 사용자 정의 스크립트와 같습니다.
  • 다른 소프트웨어와의 통신, 최적화 엔진이나 클라우드 API를 포함합니다.

이를 통해 데이터 일관성이 보장되고, 수동 작업이 줄어들며, 복잡한 워크플로가 지원됩니다.

  • 매개변수 연구 또는 ML 통합 자동화

UEXTERNALDB는 대규모 시뮬레이션 캠페인을 자동화하고 AI 기반 방법을 지원하는 데 이상적입니다.

  • 매개변수 시뮬레이션 외부 입력 파일을 통해 제어할 수 있으므로 수동 업데이트가 줄어듭니다.
  • 대리 또는 ML 모델 통합, 예측을 가져와 시뮬레이션을 안내하는 곳입니다.
  • 자동 데이터 추출 머신 러닝 데이터 세트를 구축하거나 업데이트하기 위해.
  • 적응형 워크플로, 시뮬레이션 결과가 최적화 루프의 다음 실행에 영향을 미치는 경우입니다.

Comparison with Other User Subroutines

서브루틴 가장 적합한 제한 사항
외부DB 외부 파일/데이터베이스 통신 물질적 행동에 적합하지 않음
UMAT/VUMAT 사용자 정의 소재 모델 파일 I/O 없음, 크로스 스텝 메모리 없음
유암 사용자 정의 변수 출력 Can’t store data externally
파이썬 API 전/후처리, 작업 자동화 시뮬레이션 중에는 접근이 불가능합니다

결론

Abaqus에서 UEXTERNALDB 서브루틴을 완벽하게 활용하면 외부 데이터 소스와의 통합을 통해 고급 시뮬레이션을 수행할 수 있습니다. 본 문서에서는 Abaqus의 UEXTERNALDB 서브루틴에 중점을 두고 그 목적, 이점, 구조를 설명하여 모든 수준의 사용자가 효과적으로 구현할 수 있도록 지원합니다. 주요 용도로는 데이터 초기화, 결과 내보내기, 단계 간 통신 지원 등이 있으며, Python 스크립팅과 같은 방법보다 뛰어난 장점을 제공합니다. 또한 UEXTERNALDB가 시뮬레이션 프로세스와 상호 작용하는 방식을 다루고, 구문을 설명하며, 실제 코딩 예제를 제공합니다. 마지막으로, 일반적인 오류, 디버깅 팁, 그리고 UEXTERNALDB를 사용하여 시뮬레이션 제어 및 자동화를 향상시킬 때 얻을 수 있는 다양한 이점을 강조합니다.

그만큼 CAE 보조원 저희는 고객님의 모든 CAE 요구 사항을 충족하기 위해 최선을 다하고 있으며, 고객님의 피드백은 이러한 목표 달성에 큰 도움이 됩니다. 궁금한 점이 있거나 문제가 발생하면 WhatsApp을 포함한 소셜 미디어 계정을 통해 언제든지 공유해 주세요.

모든 수준의 사용자를 위한 무료 PDF 가이드와 자세한 동영상이 포함된 포괄적인 Abaqus 튜토리얼 페이지를 살펴보세요. 무료 및 프리미엄 패키지와 함께 Abaqus를 효율적으로 마스터하는 데 필요한 필수 정보를 확인하세요. Abaqus 여정을 시작하세요. Abaqus 튜토리얼 지금!

Related 조항

Author

훈련 그룹

Your 댓글

답글쓰기