温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

2024-01-24

???????????????? 欢迎来到本博客 ❤️❤️????????

????博主优势: ???????????? 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️ 座右铭: 行百里者,半于九十。

???????????? 本文目录如下: ????????????

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Python代码、数据


????1 概述

文献:

Decadal global temperature variability increases strongly with climate sensitivity | Nature Climate Change

https://www.nature.com/articles/s41558-019-0527-4

https://www.nature.com/articles/s41558-019-0527-4

https://www.nature.com/articles/s41558-019-0527-4

摘要
气候相关的风险不仅取决于温室气体的变暖趋势,还取决于这一趋势的变化。然而,对气候变化影响的评估往往集中在全球变暖的最终水平上,偶尔关注全球变暖的速率,而很少关注变化趋势。在这里,我们展示了对温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化。与直觉相反,高敏感性气候不仅更有可能出现十年尺度的快速变暖,而且更有可能在历史上出现“停滞”时期,而低敏感性气候则更少出现。在历史时期,相对不常见的降温或停滞十年在高ECS世界(ECS=4.5 K)中的可能性是低ECS世界(ECS=1.5 K)的两倍多。由于ECS还影响未受控制的人为强迫未来情景下的背景变暖速率,因此超级变暖十年的可能性——超过二十世纪全球变暖的平均速率十倍以上——对ECS更加敏感。

???? 2 运行结果

部分代码:

# The warming probabilities
Z_proj_sup_warm = compute_odds_using_norm_distr(a, b, rate_list2/10, \
warming=True, mn=mn_war)
CS5 = ax5.contour(X, Y, Z_proj_sup_warm.transpose(), 6, colors='C3',\
levels=levels)
CS5.levels = [nf(val)*100 for val in CS5.levels]
ax5.clabel(CS5, CS5.levels, inline=True, fmt=fmt, fontsize=9)
#The cooling probabilities
Z_proj_sup_cool = compute_odds_using_norm_distr(a, b, rate_list2/10, \
warming=False, mn=mn_war)
CS6 = ax5.contour(X, Y, Z_proj_sup_cool.transpose(), 6, colors='c',\
levels=levels)
CS6.levels = [nf(val)*100 for val in CS6.levels]
ax5.clabel(CS6, CS6.levels, inline=True, fmt=fmt, fontsize=9)

ax5.set_xlabel(r'decadal trend (K decade$^{ {-1}}$)', size=12)
ax5.set_ylabel('ECS (K)', size=12)
ax5.set_title("Probability of decadal warming rate under RCP8.5", \
size=12, loc='center')
ax5.plot([anomaly_RCP85, anomaly_RCP85], [2, 4.5], lw=2, c="silver")

return fig, fig_sup, mod_vars

for experiment in ["control", "historical", "projections"]:
#for experiment in ["control"]:
nmods = 16
nfit = 49

#Bayesian, OLS, Bootstrap, Latentx,lognormalpsi, Latentx_quadratic, quadratic
linear_regression_type = 'OLS'
print_each_model = False
filter_models = 0       # filter_models=1 to use model output filtered to HadCRUT4 obs



# Data to consider
if experiment == 'control':
start_yr = 0        # If starting date not permitted; change nyr1 and nyr2
end_yr = 499        # If the end year is 499, one model (GISS) will me omitted
elif experiment == 'historical':
start_yr = 1880     # If starting date not permitted; change nyr1 and nyr2
end_yr = 2012
elif experiment == 'projections':
start_yr = 2000     # If starting date not permitted; change nyr1 and nyr2
end_yr = 2089
elif experiment == 'aroundnow':
start_yr = 1970
end_yr = 2040

stdbetaW15 = []
ECS_best_list = []
ECS_hi_list = []
ECS_lo_list = []


# Detrending options
dtrd = 1

# Length and number of windows
kwind = end_yr-start_yr+1-winlen

# Observational Variables
jvar = 0
var_names = [r'SD$[\beta]$']
jvar_max = len(var_names)

mod_vars_constr = np.zeros((jvar_max, kwind, nmods))


# Define common climatological period
if experiment == 'control':
nyr1 = start_yr
nyr2 = start_yr+30
ensemble = 'control'
elif experiment == 'historical':
nyr1 = 1970 - start_yr
nyr2 = 2000 - start_yr
ensemble = 'hist'
if filter_models > 0: ensemble = 'hist_f'
elif experiment == 'projections':
nyr1 = 2020 - start_yr
nyr2 = 2050 - start_yr
ensemble = 'RCP85'
elif experiment == 'aroundnow':
nyr1 = 1970 - start_yr
nyr2 = 2000 - start_yr
ensemble = 'RCP45'

nyrs = end_yr-start_yr + 1


# ========================================================================
# Get model output
# ========================================================================
N_mods, lambda_mod, ecs_mod, mod_name, mod_lab, dT_mods, yr, _, _ = \
get_CMIP_data(ensemble, nmods, start_yr, end_yr, nyrs, nyr1, nyr2, filter_models, last_n_yrs=True)

# ========================================================================
# Calculate statistics in each window
# ========================================================================
stdT, stdN, ar1T, ratio, mod_vars, end_of_window =\
calculate_major_statistics(dT_mods, N_mods, start_yr, end_yr, yr, jvar_max, dtrd, winlen, nmods)


# ========================================================================
# Calculate key statistics for each model
# ========================================================================
stdN_mod, mod_var, stdT_mod, ar1T_mod, ratio_mod, q2co2, rad_factor = \
calculate_statistics_per_model(stdT, stdN, mod_vars, jvar, ar1T, ratio, ecs_mod, \
mod_lab, mod_name, lambda_mod, print_each_model, nmods)


if experiment == 'control':
print_info_models(ecs_mod, stdN_mod, mod_var, rad_factor)


x = mod_var[0:nfit]
if experiment == 'control':
STDB_CTRL = x
ecs = ecs_mod[0:nfit]
xlab = var_names[jvar]
ylab = 'ECS (K)'

corr, dcorr = cross_corr(x, ecs, 0)
print(' ')
print('OLS Correlation of {} and {} in {} = {:.3f} +/- {:.3f}'.format(ylab, \
xlab, experiment, corr, dcorr))

if experiment == 'control':
x_obs = 10          # some fake numbers
dx_obs = 10         # some fake numbers
xfull = mod_var[0:nfit]
yfull = ecs_mod[0:nfit]

a, b, _, _, _, _, _, _, _ = EC_pdf_ECS(xfull, yfull, x_obs, dx_obs, xlab,\
ylab, mod_lab, lambda_mod, nmods, nfit, linear_regression_type, 0)

if experiment == 'control':
# This plots (a) of figure 4
fig_contour_odds, fig_sup, mod_vars_control = fig04_contour(experiment, True, mod_vars, \
fig_contour_odds, fig_sup)
else:
# This plots (c) of figure 4 and maybe also fig ED2a
fig04_contour(experiment, True, mod_vars_control, fig_contour_odds, fig_sup)

if experiment == 'control':
fig_contour_odds, fig_sup, mod_vars_control = fig04_contour(experiment, True, mod_vars, \
fig_contour_odds, fig_sup)


# The scatter part of the figures, so b, d and again b
def scatterandfit(STDB_CTRL, ecs, rate, warming=True):
'''scatterplot of chances getting over certain threshold and ECS,
depending on the background rate'''
if warming is True:
plot_scat_full(ecs, norm(rate, STDB_CTRL).sf(0.07)*100, 'ECS (K)', \
'probability of warming >0.7 K/dec', mod_lab, ecs_mod, 3, ecs_or_lambda='ecs')
OLSfit = sm.OLS(norm(rate, STDB_CTRL).sf(0.07), add_constant(ecs)).fit()

if warming is False:
plot_scat_full(ecs, norm(rate, STDB_CTRL).cdf(0.0)*100, \
'ECS (K)', 'cooling decade chance', mod_lab, ecs_mod, 3, ecs_or_lambda='ecs')
OLSfit = sm.OLS(norm(rate, STDB_CTRL).cdf(0.0), add_constant(ecs)).fit()

rsquared = OLSfit.rsquared
print('rsquared of ECS/anomolous trend X is {:.2f}'.format(rsquared))
return


if experiment == 'historical':
# ax3 assumes that there is a constant background warming, independent of model
ax3 = fig_sup.add_subplot(122)
rate = [anomaly_hist/10] * len(ecs)
plt.sca(ax3)
scatterandfit(STDB_CTRL, ecs, rate, warming=False)


ax3.plot(np.linspace(2.0, 4.5, 100), Z_hist_con[argmin0]*100, lw=2, color='silver')
ax3.set_xlabel('ECS (K)', fontsize=12)
ax3.set_ylabel('Probability (%)', fontsize=12)
ax3.tick_params(axis='both', which='major', labelsize=12)
ax3.set_title(r'Probability of anomaly in trend <-{:.1f} K decade$^{ {-1}}$'.format(anomaly_hist), \
loc='center', size=12)


ax3.spines['right'].set_visible(False)                   # remove axes top, right
ax3.spines['top'].set_visible(False)

# ax4 assumes a variable background warming, dependent on ECS
ax4 = fig_contour_odds.add_subplot(222)
rate = background_warming('hist')['rate_explained_by_ECS']
rate = background_warming('RCP45', experiment='aroundnow')['rate_explained_by_ECS']
plt.sca(ax4)
scatterandfit(STDB_CTRL, ecs, rate, warming=False)
ax4.plot(np.linspace(2.0, 4.5, 100), Z_hist_sup[argmin0]*100, color='silver', lw=2)
ax4.set_xlabel('ECS (K)', fontsize=12)
ax4.set_ylabel('Probability (%)', fontsize=12)
ax4.tick_params(axis='both', which='major', labelsize=12)
ax4.set_title('Probability cooling under competing processes', size=12, loc='center')
ax4.set_ylim([0.0, 12])

ax4.spines['right'].set_visible(False)                   # remove axes top, right
ax4.spines['top'].set_visible(False)

????3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

???? 4 Python代码、数据

a 小部件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现) 的相关文章

  • 为什么 JPA/hibernate 不能映射到 MySQL blob 类型?

    我收到以下错误 Caused by org hibernate HibernateException Wrong column type in TestTable for column PAYLOAD Found blob expected
  • 0x0A 和 0x0D 之间的区别

    我正在研究蓝牙 我试图编写代码以在连接时继续监听输入流 我遇到了以下代码片段 int data mmInStream read if data 0x0A else if data 0x0D buffer new byte arr byte
  • 如何在 Spring Boot 中跳过将某些 @Entity 类创建为 h2(内存中)数据库中的表?

    我正在尝试构建一个使用 2 个数据源的 Spring Boot 应用程序 我现在的主要数据库是内存数据库 仅用于测试目的 其中的表是在我创建的 sql 文件的帮助下填充的 另一个数据库 oracledb 具有已填充的表 我想实现什么目标 我
  • 枚举列表中的列表

    我有一个约会 并记录了那天发生的事件 我想枚举显示日历的日期的事件列表 我还需要能够从列表中删除事件 def command add date event calendar if date not in calendar calendar
  • 如何为Python的mechanize设置超时值?

    如何为Python的mechanize设置超时值 亚历克斯是正确的 mechanize urlopen需要一个timeout争论 因此 只需插入一些浮点型秒数 http docs python org library socket html
  • 从 MySql 迁移:MariaDB 服务器意外关闭客户端连接

    由于许可 商业使用原因 我们正在从 MySql 迁移到 MariaDB 我们已经成功用 MariaDB 客户端 jar 替换了 MySql 连接器 jar 第一次更改 现在正在尝试用 MariaDB 服务器替换 MySql 服务器而不更改数
  • 将数据导入 Django 的好方法

    我想定期将数据导入 Django 项目 我需要告诉我的数据提供者我想要以什么格式接收数据 我应该以 Json XML CSV 格式请求吗 在 Django 中通常如何处理这个问题 Django 有一个用于导入数据的完整框架 称为 Fixtu
  • 如何使用python将下载的音频文件扩展名重命名为mp3

    目前 我正在尝试根据艺术家姓名和歌曲标题将 YouTube 音乐视频下载为音频文件 下载所有视频后 我尝试将所有音频文件从 webm 或 mp4 扩展名重命名为 mp3 但似乎我在将文件名和扩展名更改为 mp3 时遇到了一些错误 我的代码基
  • 如何在 Python 中将列表变量传递给 subprocess.call 命令

    我有一个清单 apps apps append wq35a5huqlja45jsyukrpmwuiayovrmh apps append q7mimvgduueernwvw4y22t5huemykntw apps append pmudbp
  • 如何从另一个 Python 文件将 Uvicorn FastAPI 服务器作为模块运行?

    我想使用 Uvicorn 从不同的 Python 文件运行 FastAPI 服务器 uvicorn模块 main py import uvicorn import webbrowser from fastapi import FastAPI
  • 如何在 Robot Framework 中将变量定义为具有列表值的字典

    在我的一个测试用例中 我需要定义一个字典 其中键是字符串 值是字符串数组 我怎样才能在机器人框架中做到这一点 我第一次尝试使用如下所示的构造 但行不通 Variables Dictionary A StringA1 StringA2 B S
  • 使用 Java 重新启动 Tomcat

    我需要从 Java 代码重新启动 tomcat 例如 如果某个查询在一段时间内没有执行 那么它将自动重新启动 tomcat 我已经尝试了以下关闭和启动代码 但是当我们关闭tomcat时 java代码将不会运行并且tomcat不会启动 注意
  • 为什么这个 eclipse 错误显示以及它的解决方案应该是什么

    缺少库 xdoclet 1 2 1 jar 选择 XDoclet 的主目录 1 2 1 为什么这个 eclipse 错误显示以及它的解决方案应该是什么alz 这可能是因为该 jar 没有添加到您的项目构建路径中 请按照以下步骤操作 Righ
  • 错误:线条魔术函数

    我正在尝试使用 python 读取文件 但不断收到此错误 ERROR Line magic function user vars not found 我的代码非常基本 names read csv Combined data csv nam
  • Java 中的引用变量里面有什么?

    我们知道对象引用变量保存表示访问对象的方式的位 它不保存对象本身 但保存诸如指针或地址之类的东西 我正在阅读 Head First Java 第 2 版 一书 书中写道 第 3 章第 54 页 在 Java 中我们并不真正知道什么是 在引用
  • 返回数据集的 kSoap 和 .Net Web 服务

    我知道使用数据集是一个很大的罪恶 但由于该服务不在我的控制之下 并且创建代理服务的前景是不可能的 我想看看是否有人创建了可以使用 kSoap 序列化器反序列化的类结构 或者我是否吸错了东西 同时要启动它 看看是否可行 以下是预期的结果数据
  • pytest - ModuleNotFoundError - python 3.6.4

    我有一个具有以下布局的项目 MANIFEST in README md init py company init py api init py auth py debug py exceptions py reporting py rest
  • 使用java读取行并映射过滤数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions publi
  • 如何使用 GWT 2.4 在服务器端动态创建 UI

    我正在尝试使用 Google Web Toolkit v2 4 创建用户界面 由于多种原因 我需要在运行时指定服务器上接口的内容 我的意思不仅仅是按钮需要动态标签等 而是整个 UI 需要在运行时创建 我的大部分 UI 都可以指定为直接的 H
  • 用 Ruby 或 Python 解析 SVG 的库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVG 是一个庞大的标准 它基于 XML 我过去曾将 SVG 解析为 XML 然而 有些事情很难 例如

随机推荐