AMOC Trend 분석¶
CMIP6 모델 기반 대서양 열염순환(AMOC) 추세 분석 프로젝트
개요¶
해양 데이터 분석 프로젝트로, CMIP6 기후 모델 37개를 활용하여 AMOC(대서양 열염순환)의 장기 추세를 분석하고, 감소 원인을 규명하고자 한 학부 연구 프로젝트.
- 수행 기간: 학부 과정
- 데이터 출처: WCRP CMIP6, CTD 관측 데이터
- 분석 도구: MATLAB
- 블로그: AMOC Trend 분석
문제정의¶
AMOC이란?¶
AMOC(Atlantic Meridional Overturning Circulation)은 대서양을 순환하는 거대한 해류 시스템으로, 지구의 열을 북쪽 고위도로 수송하며 기후를 조절하는 중요한 역할을 한다.
연구 배경¶
- 지구온난화로 인해 열염순환이 약 2000년대부터 점진적으로 약화
- 최근 10년간 AMOC은 0.4 Sv/yr의 빠른 속도로 감소
- CO2 배출량 기반 기후변화 시나리오에서 열염순환 약화 예측 일관
- AMOC 약화의 원인은 아직 뚜렷하게 밝혀지지 않음
연구 목표¶
WCRP에서 제공하는 37개 CMIP6 모델을 통해 AMOC 관측자료와 비교/분석하고, AMOC 감소 패턴의 원인을 분석
가설설정¶
가설 1: 초기 AMOC 강도와 미래 감소율 상관¶
- 현재 강도가 강한 모형일수록 미래 기후변화 감소율이 클 것
가설 2: 해빙 변화와 AMOC 연관성¶
- 스발바르 해역의 해빙 변화가 AMOC 변화와 상관관계 존재
가설 3: 미분방정식으로 감소 양상 모델링 가능¶
- AMOC의 감소 양상을 지수함수 형태의 미분방정식으로 표현 가능
데이터¶
CMIP6 모델 데이터¶
| 항목 | 내용 |
|---|---|
| 모델 수 | 37개 |
| 시나리오 | SSP245 (중간 정도 온실가스 배출) |
| 기간 | 1850-2100년 |
| 변수 | AMOC 강도, 해빙 면적(icex) |
파일명 예시:
- AMOC_CMIP6_ACCESS-CM2_ssp245_1850-2100_J_D_MYM.txt
- icex_CMIP6_ACCESS-CM2_ssp245_1850-2100_J_D_MYM.txt
CTD 관측 데이터¶
| 컬럼 | 설명 |
|---|---|
| CAST | 측정 선박 구분 |
| Year, Month, Day | 측정 일자 |
| Latitude, Longitude | 위경도 |
| Depth | 수심 |
| Temperature | 수온 |
| Salinity | 염분 |
데이터 전처리¶
% 1. CTD 데이터 병합
list = dir('CTD_simple*.csv');
data_all = [];
for i = 3:length(list)
file_name = fullfile(list(i).folder, list(i).name);
data0 = readtable(file_name);
data = table2array(data0);
data_all = [data_all; data];
end
% 2. 결측치 처리
data_1 = rmmissing(data_all);
data_1(data_1 == -999) = NaN;
% 3. 연간 일자 변환 (윤년 고려)
days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
for i = 1:length(month_data)
days(i) = sum(days_in_month(1:month_data(i))) + day_data(i);
end
4차원 Grid 매핑¶
CTD 데이터를 분석에 적합한 격자 형태로 변환.
% 4차원 grid 생성: 경도 x 위도 x 수심 x 일자
lat_grid = 50:0.5:80;
lon_grid = -180:0.5:180;
depth_grid = depth(1:57); % 57m까지
grid = zeros(length(lat), length(lon), length(depth0), 365);
for year = 1980:2022
for i = 1:size(lagrange_data, 1)
% 가장 가까운 그리드 찾기 (최소 제곱 오차)
[~, lat_index] = min((data_lat(i)-lat).^2);
[~, lon_index] = min((data_lon(i)-lon).^2);
[~, depth_index] = min((data_depth(i)-depth).^2);
grid(lon_index, lat_index, depth_index, days(i)) = data_value;
end
save([num2str(year) '.mat'], '-v7.3', 'grid');
end
주의사항: for 루프 3중 중첩 시 메모리/성능 문제 발생. 순차적으로 처리.
분석/모델링¶
37개 모델 시각화¶
folderPath = '/ssp245';
year = 1850:2100;
amocFiles = dir(fullfile(folderPath, 'AMOC*.txt'));
amoc_mean = zeros(251, length(amocFiles));
for i = 1:length(amocFiles)
currentFile = amocFiles(i).name;
amoc_data = load(fullfile(folderPath, currentFile));
amoc_mean(:,i) = mean(amoc_data, 2);
end
% 앙상블 평균 계산
amoc_ensemble_mean = mean(amoc_mean, 2);
초기 강도 vs 미래 감소율 상관분석¶
index_1980 = find(year == 1980);
index_2000 = find(year == 2000);
index_2100 = find(year == 2100);
% 1980-2000 평균 강도
amoc_strength = mean(amoc_mean(index_1980:index_2000, :), 1);
% 2000-2100 감소율
dAMOC_dt = (amoc_mean(index_2100, :) - amoc_mean(index_2000, :)) / 100;
% 상관계수 계산
correlation_coefficient = corrcoef(amoc_strength, dAMOC_dt);
% 결과: r = -0.46
% "초기 AMOC 강도가 클수록 미래 감소율이 크다"
미분방정식 모델링¶
AMOC 변화 양상을 나타내는 미분방정식 수립.
경계조건 설정: - 초기값: A(2000) = 앙상블 평균값 - 미래값: A(2100) = 앙상블 평균값
특이해(Particular Solution):
변화율 분석 (이중 이동 평균)¶
% 20년 lag로 변화율 계산
lag = 20;
change_rate = zeros(length(amoc_ensemble_mean) - lag, 1);
for i = 1:length(change_rate)
change_rate(i) = (amoc_ensemble_mean(i+lag) - amoc_ensemble_mean(i)) / lag;
end
% 결과: 초기 감소 시기의 감소율 > 미래(2100년)의 감소율
% 지수함수 감소 양상 확인
관측 데이터와 모델 비교¶
% 27년치 데이터의 선형 회귀 기울기 비교
AMOC_ann_1 = AMOC_ann(:, 1:131);
gradient_m = zeros([37, 105]);
for k = 1:37
for j = 1:105
p = polyfit(x, AMOC_ann_1(k, j:j+26), 1);
gradient_m(k, j) = p(1);
end
end
% Boxplot으로 시각화
% 일부 모델(CMCC-ESM2 등)만 관측치 변동성 범주 내 포함
결과¶
주요 발견¶
- 장기 추세: 약 2000년부터 AMOC 급격한 감소 시작
- 모델 간 차이: 초기 AMOC을 강하게 모의하는 모델일수록 미래 감소율 급격
- 상관계수: 초기 강도와 미래 감소율 간 r = -0.46
- 감소 양상: 지수함수 형태의 감소 패턴 확인
모델 신뢰성 평가¶
- 대부분 모델: 관측치 기울기 범위 밖
- 일부 모델(CMCC-ESM2): 관측치 변동성 잘 모의
- AMOC 변화 양상을 잘 모의하는 모델 선별 필요
한계점¶
- Time-lag 문제: 현재 미분방정식은 동일 시간의 관계만 표현
- DDE(Delayed Differential Equation) 개념 활용 필요
- 적절한 time lag 값 결정 추가 연구 필요
배운 점¶
- 고차원 데이터 처리: 4차원 grid 매핑의 개념과 구현
- 라그랑주 데이터: 불규칙 측정 데이터를 격자 형태로 변환
- 앙상블 분석: 다수 모델의 불확실성 정량화
- 미분방정식 모델링: 물리적 현상의 수학적 표현
- 자료 부족 극복: 해양 분야 자료 부족 시 모델 데이터 활용
기술 스택¶
| 분류 | 도구 |
|---|---|
| 언어 | MATLAB |
| 데이터 | CMIP6 NetCDF, CTD CSV |
| 분석 | 상관분석, 회귀분석, ODE |
| 시각화 | MATLAB Plot, Boxplot |
| 파일 형식 | .mat (v7.3), .txt, .nc |
관련 문서¶
참고자료¶
- CMIP6 SSP 시나리오 설명
- EU Copernicus 해양 데이터