오랜만에 본업으로 돌아와, 이번에는 조화분해에 대해 알아보도록 하겠다. 학위과정 중에는 matlab의 t-tide를 주로 이용했었는데, matlab을 활용할 수 있는 여건이 되는 기업들은 많지 않다. 파이썬과 같은 무료 언어 패키지를 활용해야 하는데, 다행히 파이썬에서도 t-tide 패키지가 있다. 우연히 업무차 조화분해를 할 일이 생겨서 파이썬으로 조화분해를 해보게 되었고, 이 과정에 대해 남겨보도록 하겠다.
1. 조화분해(Harmonic analysis)란,
조화분해란 조석 관측 자료를 바탕으로 조석의 성분을 분리하고 각 조석 성분마다의 진폭과 지각을 구하는 분석 방법이다. 조석은 달과 태양을 포함한 다수의 천체들의 규칙적인 운동에 의해 물이 오르락 내리락하는 현상이다. 각 천체들의 인력에 의해 서로를 잡아 당기는데, 가장 크게 작용하는 것이 태양과 달이다.
- 조석 - 달과 태양 등 천체의 움직임과 인력에 의해 바닷물이 규칙적으로 오르락 내리락하는 현상
|| 대조와 소조
태양과 달이 같은 방향으로 힘을 작용하면, 그 만큼 물의 높이가 높아지는 대조기(spring tide)가 되고, 태양과 달이 서로 다른 방향으로 힘을 작용하면, 그 만큼 힘이 분산되어 상대적으로 물의 높이가 덜 높아지는 소조기(neap tide)가 된다. 이러한 대조와 소조는 달이 지구를 공전하는 약 27일을 주기로 나타난다.
- 대조기 - 태양과 달과 지구가 일직선으로 조차가 가장 큰 시기
- 소조기 - 태양과 달과 지구가 90도로 조차가 가장 작은 시기
|| 고조와 저조
또한, 지구도 자전을 하면서 한 지역이 하루 동안 태양과 달에 가장 가까운 시기와 가장 멀었던 시기가 나타나는데, 가장 가깝게 힘을 받아 물이 높아지는 시기를 고조(high tide), 가장 물이 낮아지는 시기를 저조(low tide)라고 한다. 우리나라는 하루에 2번 고조와 저조가 나타난다.
|| 분조
이처럼 조석은 태양과 달의 위치에 따라 나타나는 현상이며, 다수의 규칙적인 성분들이 합성되어 일어나며, 이러한 각각의 성분들을 분조(tidal constituent)라고 한다. 조화분해란, 이러한 조석의 각각의 성분인 분조를 분리해 내는 방법이며, 이 분조를 알면, 다시 합성하여 조석을 재현할 수 있다.
- 분조 - 조석을 이루는 각각의 성분
- 조화분해 - 각각의 분조를 분리해내는 과정
우리나라는 하루에 2번 고조와 저조현상이 뚜렷하게 나타나는 반일주조 우세 지역으로 가장 큰 영향을 끼치는 4개의 분조인 M2, S2, K1, O1을 4대분조라고 하며, 조석특성 분석에 사용하는 분조는 약 64개이다.
2. 조화분해방법
위에서 설명한대로 각각의 주기와 진폭을 가진 여러개의 분조들이 중첩되어 조석을 구성하며, 아래 그림에 4대분조를 예를 들은 그림으로 표현하였다. 각기 다른 주기와 진폭, 위상의 분조들이 결합하여 시간별로, 일별로, 주별로, 월별로, 연별로도 물 높이와 조차가 달라진다. 조화분해는 이를 반대로, 결합된 조석에서 각각의 분조를 분리해내는 방법이라고 이해하면 된다.
조석에 의한 물 높이(h)는 아래의 수식으로 계산을 할 수 있다. H0는 평균해면이며, σ는 이미 정의된 주기, 그리고 Hi와 δi는 조화분석을 통해 얻어낸 조화상수인데, 이러한 복잡한 계산은 이미 과거의 학자들이 다 풀어냈고, 이를 컴퓨팅 계산화해놓은 것이 조화분해 툴이나 패키지이다.
|| 조화분해 프로그램, t-tide와 u-tide
조화분해 프로그램은 TASK2K package(Bell, 1999)와 IOS tidal package(Foreman, 1977)가 가장 널리 사용되고 있다. 최근 자주 이용되는 u_tide와 t_tide는 Foreman의 이론을 바탕으로 Codiga가 개발한 패키지가 u_tide이며, Pawlowicz가 개발한 패키지가 t_tide이다. 두 패키지 모두 matlab 기반으로 개발되었지만, 현재는 파이썬 언어로도 배포되고 있으며, 근본적으로 분조의 주기와 계산식이 동일 계열이라서 큰 차이는 없는 것으로 알려져있다.
|| 파이썬 기반 t-tide
최근 사용한 패키지는 파이썬 기반의 t-tide이며, 따라서, 이 패키지의 사용법을 소개할 것이다. 다운로드 및 설치는 아래와 같이 구글에 '파이썬 ttide'라고 치면 github에 올려져있다. 설치방법부터 코드 사용법까지 올려져 있으니, 이를 참고하면 될 것 같다.
패키지 내 코드를 보면, 아래와 같이 조석분석 및 조화분해와 관련된 파이썬 코드들이 있는데, 이 중 주로 사용하는 코드는 1. t_tide와 2. t_predic이다. t_tide는 조화분해를 하는 코드이며, t_predic은 반대로 각 분조의 조화상수를 바탕으로 조석예측을 하는 코드이다.
|| t_tide와 t_predic 사용법
t_tide와 t_predic의 코드를 보며 간단한 사용법에 대해 소개해보도록 하겠다. 실제 사용과정은 다음 글에서 더 상세히 남겨보도록 하겠다.
1) t_tide
t_tide코드를 보면, 아래와 같이 정의되어 있다. 입력해야하는 변수들은 xin, dt, stime, lat, out_style, outfile 등등이 있으며 이에 대해 간략히 설명해보도록 하겠다.
- xin - 관측된 조위값을 넣으면 된다. 만약 조류조화분해일 경우에는 u와 v를 복소수(complex)로 변환한 (U + 1j * V) 형태로 넣어주면 된다.
- dt - 입력한 시계열의 시간간격을 입력해주면 된다. 디폴트값은 1(시간)로 만약 10분 단위 자료라면 1/6, 1분 단위라면 1/60을 입력하면 된다.
- stime - 시계열의 시작시간을 입력하면 된다. datenum 또는 datetime 형태로 입력하면 된다.
- lat - 관측 지점의 위도를 입력하면 된다.
- out_style - 출력되는 결과의 형태를 지정한다. 입력하지 않아도 무방하다.
- outfile - 조화분해결과를 저장할 파일명 및 경로를 입력한다. 입력하지 않아도 무방하다.
그 외에 프리필터나 장주기 보정, 천해조 보정 등의 옵션도 있지만, 본 글에서는 생략하였다.
2) t_predic
t_predic도 크게 어렵지 않으며 코드는 아래와 같다.
- time - 조석을 예측하려는 시간을 시계열로 입력하면 된다.
- names - 조석 예측에 반영할 분조들의 이름을 입력하면 된다.
- freq - 조석 예측에 반영할 분조들의 주기를 입력하면 된다.
- tidecon - 조석 예측에 반영할 분조들의 진폭, 위상 등 조화상수를 입력하면 된다.
- lat - 예측하려는 지점의 위도를 입력하면 된다.
- ltype - nodal주기 보정 적용 유무를 입력하면 된다.
names, freq, tidecon은 조화분해 결과로 나타난 변수들을 그대로 넣어주면 된다. nodal 주기의 경우 추후 자세히 설명하도록 하고, 본 글에서는 생략하도록 하겠다. 간략히 18.6년 이상의 관측정보를 활용하여 data 자체에 nodal 주기가 포함되어 있으면, full, 그 보다 짧은 기간으로 강제로 nodal 주기를 적용해야하면 nodal을 입력하면 된다.
이번 글에서는 조화분해에 대해 간단하게 알아보았다. 다음 글에서 실제 조위 관측정보를 활용하여 조화분해를 해보도록 하겠다.
'자료분석 및 코딩 > 파이썬' 카테고리의 다른 글
[파이썬] 유속, 풍속(speed) & 유향, 풍향(degree)의 U, V 변환 (3) | 2025.01.03 |
---|---|
[조화분해] 파이썬을 활용한 조화분해(harmonic analysis) - 2. t-tide (1) | 2025.01.02 |
[파이썬] 해양수치모델 검증 - 1. nc 파일읽기, 특정 지점(위치) 찾기, 최근접 격자 찾기 (1) | 2024.04.30 |
[파이썬] 해양수치모델 시간 형식 변환. GMT, UTC, KST, 그리니치, 줄리안 데이 변환 (0) | 2023.06.30 |
[파이썬] 해양수치모델 NetCDF 자료처리. 파이썬 Nc 파일 읽기 ncread (5) | 2023.06.28 |