计算由于海洋温度和盐度变化产生的比容海平面变化

news2024/11/26 21:41:20

近些年由于全球气候变暖,全球的海平面不断上升。目前的研究显示,造成海平面变化的原因主要有两个:一个是由于陆地质量的流入(比如两级冰川的融化,冰雪以径流的形式汇入海洋,总体上使得海洋的总质量产生变化),另一个是由于海洋面积巨大,会吸收全球范围内大量的热量,使得海水的温度和研究发生变化,进一步产生了比容海平面的变化。

计算比容海平面变化的基本原理见以下的专栏:

温盐海平面计算专题--01 - 哔哩哔哩 (bilibili.com)

温盐海平面计算专题--02 - 哔哩哔哩 (bilibili.com)

本专栏将进一步用matlab实现对比容海平面的计算,具体的程序代码如下:

% % % % % % % % % % read data
for i = 1:258
     SA(:,:,:,i) = salt{i,1};
     CT(:,:,:,i) = temp{i,1};
     disp(i)
 end
 % % % % % % % % %% cal steric
 time_step = length(squeeze(CT(1,1,1,:)));
 [steric_height] = steric_height_calculation(CT,SA,dep,lat,lon,time_step);
 % % % % % % % % % % save data
 load lon_lat_dep.mat
 [lon,lat] = meshgrid(lon,lat);
 ocean_height.lon = lon;
 ocean_height.lat = lat;
 ocean_height.rg  = steric_height;
 ocean_height.tt  = tt;

% % % % % % % % % % % time series
tp_gind=load('BS.txt');  
Tibet_ind=inpolygon(interpn(ocean_height.lon,1),interpn(ocean_height.lat,1),tp_gind(:,1),tp_gind(:,2));
area_scale=cal_grid_region(ocean_height);
for ii=1:size(ocean_height.rg,3)
    A = ocean_height.rg(:,:,ii);A(isnan(A))=0;
    CSR_rg(ii)=sum(sum(interpn(A',1).*Tibet_ind.*interpn(area_scale,1)))/sum(sum(Tibet_ind.*interpn(area_scale,1)));
    jgc_tt(ii)=ocean_height.tt(ii);
end
plot(jgc_tt,CSR_rg*1000) %% mm

其中使用到的函数 steric_height_calculation.m,需要注意的是,一般数据读取的温度是以开尔文为单位,而程序计算的是以摄氏度为单位,因此需要进行转换。本专栏使用的温度和盐度数据是MetOffice提供的再分析数据,需要自己提前读取。

function [steric_height] = steric_height_calculation(temperature,salinity,depth,lat,lon,time_step)
%--------------------------------------------------------------
% [steric_height] = steric_height_calculation(temperature,salinity,depth,lat,lon,time_step)
% This function is used to calculate the steric height.
% Note that the SEAWATER linrary version 3.2 by Lindsay Pender is 
% used in the code. 
%--------------------------------------------------------------
% input:
%  temperature(lon,lat,depth,time): temperature, unit: degree C
%  salinity(lon,lat,depth,time): salinity, unit: psu (PSS-78)
%  depth: depth of the ocean layer, unit: m
%  lat: latitude
%  lon: longitude
%  time_step: the number of time step of temperature/salinity 
%             ***  time_step = length(squeeze(temperature(1,1,1,:)))
%--------------------------------------------------------------
% output:
%  steric_height(lon,lat,time): steric height
%--------------------------------------------------------------
% calculate pressure from depth
pressure = zeros(length(depth),length(lat));
for k=1:length(depth)
    for j=1:length(lat)
        pressure(k,j)=sw_pres(depth(k),lat(j));%[db]
    end
end
pressure=pressure';
clear k j
rho = zeros(length(lon),length(lat),length(depth),time_step);
for t = 1:time_step
    for k = 1:length(depth)
    for j=1:length(lat)
    rho(:,j,k,t)=sw_dens(salinity(:,j,k,t),temperature(:,j,k,t)-273.15,pressure(j,k)); %[kg/m^3]
    end
    end
end

DEPTH = repmat(depth',length(lat),1);
steric_height = NaN(length(lon),length(lat),time_step);

rhobar = mean(rho,4,'omitnan'); % time-meaned rho
rho0_dep = squeeze(mean(mean(rhobar,1,'omitnan'),2,'omitnan')); % rho0 of each depth
dz =NaN(length(depth),1); 
dz(1) = abs(DEPTH(1,1)-0); 
dz(2:length(depth)) = abs(DEPTH(1,2:length(depth))-DEPTH(1,1:length(depth)-1));
DZ = NaN(length(lon),length(lat),length(depth)); rho0 = DZ;
for i = 1:length(lon)
    for j = 1:length(lat)
        DZ(i,j,:) = dz; %create DZ(lon,lat,depth) from dz(depth)
        rho0(i,j,:) = rho0_dep; % create rho0(lon,lat,depth) from rho0_dep(depth) 
    end
end

for t = 1:time_step
    steric_height(:,:,t) = -sum(DZ.*((squeeze(rho(:,:,1:length(depth),t))-rhobar)./rho0),3,'omitnan');
    disp(t)
end

需要注意的是,需要下载一个计算seawater各种物理量的库,下载链接如下:

https://github.com/ashao/matlab/tree/master/external/seawater

程序运行的结果:credit:Yuan et al., 2017.

全球某个月的比容海平面的空间分布,单位:m

渤海湾12个月的比容海平面空间分布:[-0.1,0.1],单位:m

渤海比容海平面的时间变化:单位:mm

参考资料:

https://github.com/ashao/matlab/tree/master/external/seawater

Kuo, Y.-N., Lo, M.-H., Liang, Y.-C.,Tseng, Y.-H., & Hsu, C.-W. (2021). Terrestrial water storage anomalies emphasize interannual variations in global mean sea level during 1997–1998 and 2015–2016 El Niño events. Geophysical Research Letters, 48, e2021GL094104. https://doi.org/10.1029/2021GL094104

欢迎交流学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1005030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis新篇一:认识Redis

首先,很抱歉小伙伴们,前段时间一直都没有更新,我很抱歉,现在开始持续更新Redis相关内容啦!有需要的小伙伴们可以持续关注一下小博主的新篇哦~ 希望对你们有帮助! 作者:爱撸猫的程序员 博客地址…

<C++> 基于SSE实现图像二值化

基于SSE实现图像二值化 SSE介绍及使用可见:https://blog.csdn.net/thisiszdy/article/details/132512686 本文使用SSE指令集来实现图像二值化算法,同时对比OpenCV二值化算子及for循环求解二值化的效果及性能。 // opencvTest.cpp : 此文件包含 "m…

2011-2022年北大法宝省市县环保行政处罚数据

2011-2022年北大法宝省市县环保行政处罚数据 1、时间:2011-2022年 2、范围:全国各省份、各城市、各区县 3、来源:北大法宝 4、数据指标:地区代码、地区名称、地区等级、所属省份、所属城市、处罚年份、主题分类、案件数目 5、…

如何使用谷歌浏览器连接linux服务器SSH服务

环境: 谷歌浏览器 版本 116.0.5845.141(正式版本) (64 位) Win10 专业版 安全外壳 (SSH)v.0.58 问题描述: 如何使用谷歌浏览器连接linux服务器SSH服务 解决方案: 1.找了有台安装好了这个插…

数据结构——排序算法——堆排序

堆排序过程如下: 1.用数列构建出一个大顶堆,取出堆顶的数字; 2.调整剩余的数字,构建出新的大顶堆,再次取出堆顶的数字; 3.循环往复,完成整个排序。 构建大顶堆有两种方式: 1.从 0 开…

2023更新:多功能短视频去水印工具微信小程序源码,带流量主功能(教程含源码)

简介: 这是一个自带去水印接口的多功能小程序,支持各大平台短视频去水印,保存封面、图集、标题等等,还可以本地图片去水印,图片拼接,九宫格切图,修改视频的MD5等等。当然,也支持流量…

LeetCode算法心得——和为k的子数组(前缀和+HashMap)

大家好,我是晴天学长,这是一个很重要的前缀和hash运用的题,为后面很多的题打基础,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .和为k的子数组 2) .算法思路 和为k的子数组 1.首先是前缀和 2.根据关系 s【…

Ceph入门到精通-S3 基准测试工具warp使用入门

S3 基准测试工具。 下载 下载适用于各种平台的二进制版本。 配置 可以使用命令行参数或环境变量配置 Warp。 可以使用 、 在命令行上指定要使用的 S3 服务器,也可以选择指定 TLS 和自定义区域。--host--access-key--secret-key--tls--region 也可以使用 、、 和…

22.Xaml TabControl 控件--->选项卡控件

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

计算机组成原理--数据表示

目录 1、机器数及特点 1.1 机器内的数据表示 1.1.1.原码 1.1.2. 反码 1.1.3. 补码 1.2 常见机器数的特点 2、定点数与浮点数据表示 2.1 定点数据表示 2.2 浮点数据表示 2.3 补充&#xff1a;小数的二进制表示 3、数据校验的基本原理 3.1 必要性&#xff1a; 3.2 基…

编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹)

系列文章目录 编程小白的自学笔记十三&#xff08;python办公自动化读写文件&#xff09; 编程小白的自学笔记十二&#xff08;python爬虫入门四Selenium的使用实例二&#xff09; 编程小白的自学笔记十一&#xff08;python爬虫入门三Selenium的使用实例详解&#xff09; …

X86_64函数调用汇编程序分(2)

X86_64函数调用汇编程序分&#xff08;2&#xff09; 1 X86_64寄存器使用标准2 leaveq和retq指令2.1 leaveq2.2 retq 3 执行leaveq和retq之后栈的结构3.1 执行leaveq之后栈的结构3.1.1 test_fun_b函数执行leaveq之前的栈结构示意图3.1.2 test_fun_b函数执行leaveq之后的栈结构示…

MySQL使用Xtrabackup备份到AWS存储桶

1.安装Xtrabackup cd /tmp wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.33-28/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm yum -y localinstall percona-xtrabackup-80-8.0.33-28.1.el7.x86…

Markdown 字体变红色,2种办法

老读者都知道王哥是 10 年 markdown 专家&#xff0c;今天教大家如何搞定字体颜色通用技巧 文章目录 方案一效果 方案二效果 颜色参考表 方案一 HEML 代码&#xff1a; <font colorred> 学技术&#xff0c;到 JavaPub </font>或者 <font colorFF0000> 学技术…

OpenCV之图片修复(inpaint)

图片修复基本原理&#xff1a; 我们自己标定噪声的特征&#xff0c;然后根据噪声周围区域的颜色特征修复噪声所在的区域。通俗一点就是用邻近的像素替换那些坏标记&#xff0c;使其看起来像是邻居。 如下图&#xff0c;需要将白色框框去掉&#xff1a; 标定噪声特征 先分析白…

记一次在amd架构打包arm64架构的镜像的试错经历

前提 在amd架构打包了一个镜像&#xff0c;放在arm64架构服务器上可以load ,但是run的时候报平台不兼容的问题。 运行如下命令查看发现 架构属于 amd64 如下&#xff1a; docker inspect 镜像ID需要生成一个arm的镜像才能运行。 尝试 首先Dockerfile 的FROM 基础镜像就的是…

uniapp 接入微信小程序隐私政策兼容

自2023年9月15日起&#xff0c;对于涉及处理用户个人信息的小程序开发者&#xff0c;微信要求&#xff0c;仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后&#xff0c;方可调用微信提供的隐私接口。 相关公告见&#xff1a;关于小程序隐私保…

Sharding-JDBC分库分表-分布式事务-5

分布式事务 Sharding JDBC事务介绍 分库分表必然会涉及到分布式事务的问题&#xff0c;关于这方面&#xff0c;sharding JDBC为用户提供了两种分布式事务解决方案&#xff1a;XA事务和BASE事务&#xff0c;这两个的区别是&#xff1a;XA事务&#xff0c;追求强一致性&#xf…

udev自动创建设备节点的机制

流程框图如下 自动创建 1 内核检测到设备插入后&#xff0c;会发送一个uevent事件到内核中&#xff0c;并提供有关硬件设备的信息。 2 udevd守护程序收到uevent事件后&#xff0c;创建一个设备类&#xff0c;&#xff08;向上提交目录信息&#xff09;&#xff0c;会在内核中…

道路交通资产管理体系实施指南

声明 本文是学习GB-T 42932-2023 道路交通资产管理体系实施指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 7 支持 7.1 资源 组织宜确定并提供建立、实施、保持和持续改进资产管理体系所需的资源&#xff0c;包括人力、财力、物质、技 术、知…