콘텐츠로 이동

AMOC과 NSHF 상관관계 분석 및 미래 예측

대서양 열염순환과 해수면열속 간의 관계 규명 프로젝트


개요

AMOC Trend 분석의 후속 프로젝트로, AMOC(대서양 열염순환)과 NSHF(해수면열속) 간의 상관관계를 분석하고, 라브라도 해역을 중심으로 바람 속도 변화가 이들 매개변수에 미치는 영향을 조사.


문제정의

NSHF란?

NSHF(Net Surface Heat Flux, 해수면열속)은 해양 표면과 대기 사이에서 교환되는 열 에너지의 순 흐름을 나타내는 지표.

  • 양수 값 (+): 해양이 대기로부터 열을 흡수
  • 음수 값 (-): 해양이 대기로 열을 방출

AMOC과 NSHF의 관계

AMOC이 따뜻한 물을 고위도로 수송하면, 그 따뜻한 물은 열을 방출하며 주변 대기를 데운다. 따라서 AMOC 변화는 NSHF에 영향을 미치고, 역으로 NSHF 변화가 AMOC에 피드백을 줄 수 있다.

연구 목표

  1. AMOC과 NSHF 변화 간의 관계 탐구
  2. 라브라도 해역에서 바람 속도 변화가 NSHF와 AMOC에 미치는 영향 조사
  3. 1850년~2100년 30개 기후모델 데이터로 분석

가설설정

가설 1: AMOC과 NSHF 역상관 관계

  • AMOC 강도와 NSHF 변화는 역관계

가설 2: 풍속이 NSHF와 AMOC에 영향

  • 라브라도 해에서 풍속 변화가 NSHF와 AMOC 변화에 기여

가설 3: 공간적 분포 패턴 존재

  • 풍속 변화의 공간적 분포가 NSHF와 AMOC에 유의미한 영향

데이터

CMIP6 모델 데이터

데이터 형식 모델 수 기간
AMOC txt 30개 1980-2060
NSHF NetCDF 30개 1980-2060
sfcWind (지표면 바람) NetCDF 30개 1980-2060
해수 염분 NetCDF - -
잠재 수온 NetCDF - -
북위 50도 heat_transport NetCDF - -

NetCDF 데이터 사용 이유

  1. 물리적 메커니즘 분석: 단순 시계열 상관관계가 아닌 구동력 분석
  2. 다차원 데이터 처리: 공간적 분포 분석 필요
  3. 효율적 처리: 위도, 경도, 시간 등 다차원 인덱싱

데이터 불러오기

amocFiles = dir(fullfile(folderPath, 'AMOC*.txt'));
nshfFiles = dir(fullfile(folderPath, 'nshf*.nc'));
numModels = length(amocFiles);

% AMOC 데이터 로드
for i = 1:numModels
    currentFile = amocFiles(i).name;
    amocData = load(fullfile(folderPath, currentFile));
    if any(isnan(amocData(:)))
        amocData = fillmissing(amocData, 'linear');
    end
    amocAnnual = mean(reshape(amocData, 12, []), 1);
end

% NSHF 데이터 로드 (NetCDF)
for i = 1:numModels
    currentFile = nshfFiles(i).name;
    nshfData = ncread(fullfile(folderPath, currentFile), 'nshf');
    if any(isnan(nshfData(:)))
        nshfData = fillmissing(nshfData, 'linear', 'EndValues', 'nearest');
    end
end

데이터 스무딩

10년 이동평균으로 노이즈 제거.

windowSize = 10;  % 10년

for i = 1:numModels
    amocAnnual = mean(reshape(amocData, 12, []), 1);
    amocSmoothed = movmean(amocAnnual, windowSize);
    plot(1980:2060, amocSmoothed);
end

분석/모델링

Grid별 상관계수 계산

correlations = zeros(31, 121);
pValues = zeros(31, 121);

for lat = 1:31
    for lon = 1:121
        nshfAvg = squeeze(mean(nshfAnnualMeans(lat, lon, :), 1));
        [R, P] = corrcoef(nshfAvg, amocTrends);
        correlations(lat, lon) = R(1, 2);
        pValues(lat, lon) = P(1, 2);
    end
end

% 유의수준 0.05 이하 지역 표시
figure;
imagesc(pValues < 0.05);
colormap([1 1 1; 0 0 0]);
title('Significant Correlations (p < 0.05)');

변화량 계산 (1990-2050)

장기 추세 분석을 위해 10년 단위 평균 변화량 계산.

decadeLength = 10;
startYear = 1990;
endYear = 2050;

damoc = zeros(numModels, 1);
dnshf = zeros(121, 31, numModels);
dWind = zeros(121, 31, numModels);

for i = 1:numModels
    % AMOC 변화량
    amoc_data = load(fullfile(folderPath, amocFiles(i).name));
    startDecadeMean = mean(amoc_data((startYear-1980):(startYear-1980+decadeLength-1)));
    endDecadeMean = mean(amoc_data((endYear-1980-decadeLength+1):(endYear-1980)));
    damoc(i) = endDecadeMean - startDecadeMean;

    % NSHF 변화량
    nshfData = ncread(nshfPath, 'nshf');
    startYearIndex = (startYear - 1980) * 12 + 1;
    endYearIndex = (endYear - 1980) * 12;

    startNshf = mean(nshfData(:, :, startYearIndex:startYearIndex + decadeLength*12 - 1), 3);
    endNshf = mean(nshfData(:, :, endYearIndex - decadeLength*12 + 1:endYearIndex), 3);
    dnshf(:, :, i) = endNshf - startNshf;
end

고상관 지역 식별

상관계수 |r| >= 0.6인 지역 추출.

high_corr_indices = [];

for lat = 1:31
    for lon = 1:121
        dnshf_squeeze = squeeze(dnshf(lon, lat, :));
        corr_value = corr(dnshf_squeeze, damoc, 'Rows', 'complete');

        if abs(corr_value) >= 0.6
            high_corr_indices = [high_corr_indices; [lon, lat]];
        end
    end
end

% 라브라도 해역: r ≈ -0.8로 가장 강한 상관성

라브라도 해역 분석

% 라브라도 해역의 NSHF 평균
avg_nshf_high_corr = zeros(numModels, 1);

for i = 1:numModels
    nshf_values = [];
    for idx = 1:size(high_corr_indices, 1)
        lon = high_corr_indices(idx, 1);
        lat = high_corr_indices(idx, 2);
        nshf_values = [nshf_values, dnshf(lon, lat, i)];
    end
    avg_nshf_high_corr(i) = mean(nshf_values);
end

% 회귀분석
p = polyfit(avg_nshf_high_corr, damoc, 1);
fprintf('Regression Line: y = %.2fx + %.2f\n', p(1), p(2));

풍속-NSHF-AMOC 관계 분석

% 풍속 변화와 NSHF 변화 상관관계
correlation_matrix_wind_nshf = zeros(31, 121);

for lat = 1:31
    for lon = 1:121
        wind_changes = squeeze(dWind(lon, lat, :));
        nshf_changes = squeeze(dnshf(lon, lat, :));

        validIdx = ~isnan(wind_changes) & ~isnan(nshf_changes);
        if any(validIdx)
            correlation_matrix_wind_nshf(lat, lon) = ...
                corr(wind_changes(validIdx), nshf_changes(validIdx));
        end
    end
end

결과

주요 발견

  1. AMOC-NSHF 역상관: 북대서양에서 유의미한 상관 패턴 확인
  2. 라브라도 해역 중요성: 상관계수 r ≈ -0.8로 가장 강한 상관성
  3. 풍속 영향: 라브라도 해역에서 풍속 변화가 NSHF와 AMOC에 유의미한 영향

물리적 해석

풍속 변화 → NSHF 변화 → 해수 표면 밀도 변화 → 심층수 형성 영향 → AMOC 변화

라브라도 해역은 심층수 형성의 주요 지역으로, 이 지역의 열 플럭스 변화가 AMOC 전체에 영향.

주의사항

  1. 인과관계 해석 주의: 상관관계가 인과관계를 의미하지 않음
  2. 양방향 피드백: AMOC 약화 → 해수 온도 하강 → 대기로부터 열 흡수 증가
  3. 차원 축소 영향: 2차원→1차원 축소 시 상관계수 과대평가 가능
  4. Time-lag 고려: 시차 상관분석(lag correlation) 추가 필요

추가 분석 필요 사항

  • Bulk Surface Evaporation Equation 활용
  • Sensible Heat Flux (SHF), Latent Heat Flux (LHF) 개별 분석
  • 시차 상관분석으로 선행/후행 관계 규명

배운 점

  1. NetCDF 데이터 처리: 다차원 기후 데이터 효율적 처리
  2. 공간 상관분석: Grid별 상관계수 계산 및 매핑
  3. 복합 시스템 이해: 대기-해양 상호작용의 복잡성
  4. 피드백 메커니즘: 일방향 해석의 위험성, 양방향 피드백 고려 필요
  5. 시차 분석: 기후 시스템에서 time-lag의 중요성

기술 스택

분류 도구
언어 MATLAB
데이터 NetCDF (.nc), txt
함수 ncread, corrcoef, polyfit, movmean
시각화 imagesc, scatter, plot
분석 상관분석, 회귀분석, 이동평균

관련 문서