BaramGIS

수치지형도를 이용한 CFD 전처리 자동화 프로그램

전산유체역학(CFD)을 이용하여 풍환경이나 오염물 확산을 분석하기 위해, 수치지형도를 이용하여 형상과 격자를 생성하는 전처리 프로그램입니다. 모두 오픈소스 소프트웨어를 이용합니다.

전처리 과정은 지형 및 건물 정보를 불러오고, 3차원 형상을 만들고, 격자를 구성하는 단계로 구성됩니다.

  • 형상 정보 : 국토지리정보원에서 API 형식으로 제공하는 수치지형도는 지리 정보 시스템(GIS)의 표준 형식을 따릅니다. 오픈소스 QGIS 프로그램용 Python 라이브러리인 OsGeo는 GIS 형식 데이터에서 기하 정보를 추출하고 처리하는 데 사용됩니다.
  • 형상 생성 및 처리 : 형상에 대한 3차원 데이터를 불러오고, 형상 간의 boolean 연산을 수행하고, 형상을 격자 생성 프로그램으로 내보내는 기능이 포함됩니다.
  • 격자 생성 : 격자는 오픈 소스 프로그램 OpenFOAM의 격자 생성 유틸리티인 snappyHexMesh를 사용하여 생성됩니다.

지형 형상 생성

수치지형도에서 3차원 표면 격자를 생성하기 위해 다음 단계를 수행합니다.

  1. 등고선 데이터 불러오기
    • 국립지리정보원에서 제공하는 연속적인 디지털 지형도를 사용합니다.
    • F10000.shp 파일을 읽어 정보를 얻습니다.
    • OsGeo를 사용하여 Python 객체로 변환합니다.
  2. 정보 포인트 추출
    • 수치지형도에서 다중 라인 문자열 형태로 저장된 등고선 점의 위치 및 높이 값을 추출합니다.
  3. 선형 보간을 이용한 높이 계산
    • 추출된 점을 사용하여 전체 지형을 나타내는 새로운 점을 정의합니다.
    • 새로운 점은 사용자가 임의로 설정한 간격으로 x, y 방향으로 정렬된 격자 형태로 생성됩니다.
    • 새로 생성된 격자점의 높이 값은 주변 윤곽점으로부터 2차원 선형 보간을 통해 계산됩니다.
  4. 높이 보정
    • 가장 낮은 고도의 z좌표가 0이 되도록 이동합니다.
    • 지형의 끝이 경계에 도달하기 전에 z 값이 점차 감소하도록 지형을 이동합니다.
  5. 표면 격자 만들기
    • vtk 라이브러리(STL 또는 OBJ 형식)를 사용하여 점들을 표면 격자로 변환합니다.
  6. 추가 보정
    • 미래에 예정된 디지털 지형도나 토목 공사에 반영되지 않은 최신 변경 사항을 포함합니다.

건물 형상 만들기

수치지형도에서 건물의 평면 데이터를 가져와서 3D 형상을 만들고, 건물의 메타데이터를 사용하여 건물 정보를 확인합니다.

다음 단계를 거쳐 진행됩니다.

  1. 건물 평면도 가져오기 – 연속 디지털 지형도의 B0010000.shp 파일에서 건물 정보를 Python 객체로 변환합니다.
  2. 건물 층 정보를 추출합니다.
  3. 건물의 평면도를 나타내는 표면 데이터를 추출합니다.
  4. 각 지점의 좌표를 추출합니다.
  5. OpenCaseCade 라이브러리를 사용하여 점, 선, 표면을 만듭니다.
  6. 표면을 특정 높이까지 끌어 당겨 3차원 모양을 만듭니다.

추가 구조물 생성

디지털 지형도에는 포함되지 않지만 모델링에 필요한 탱크나 대형 파이프와 같은 대형 구조물 모델과 오염 물질 누출원의 기하학적 모델을 추가할 수 있습니다. 구, 원통, 정육면체, 파이프 등의 모델을 생성할 수 있습니다.

격자 생성

전체 계산 영역은 오픈 소스 프로그램 OpenFOAM의 blockMesh 유틸리티를 사용하여 육면체 격자로 구성됩니다.

SnappyHexMesh(OpenFOAM의 격자 생성 유틸리티)를 사용하여 지형과 구조물을 포함한 3차원 격자를 최소한의 사용자 입력으로 자동 생성합니다.