温室气体排放更敏感的模型(即更高的平衡气候敏感性(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
  • python TypeError:“NoneType”对象没有属性“__getitem__”

    这次我尝试另一个例子索莱姆的博客 http www janeriksolem net 2012 08 reading gauges detecting lines and html 它是一个使用霍夫变换检测图像中的直线和圆的模块 这是代码
  • 我应该如何在 Python 中将 HTTPHandler 与 RotatingFileHandler 链接起来?

    我需要创建一个系统 将嵌入式系统中生成的日志消息远程记录在服务器上并存储在轮换日志文件中 由于网络通信的限制 日志消息必须通过HTTP协议传输 服务器已经运行了Flask http flask pocoo org 基于 HTTP 服务器 因
  • 0x0A 和 0x0D 之间的区别

    我正在研究蓝牙 我试图编写代码以在连接时继续监听输入流 我遇到了以下代码片段 int data mmInStream read if data 0x0A else if data 0x0D buffer new byte arr byte
  • 谷歌gson LinkedTreeMap类转换为myclass

    我知道这个问题以前已经被问过 由于我对java和android的新手技能 我一个多星期都无法解决这个问题 我和我的一位朋友正在开发一个 Android 项目 其中有一些类似的事情 最奇怪的部分是 只有当我从 Google Play 商店下载
  • 枚举列表中的列表

    我有一个约会 并记录了那天发生的事件 我想枚举显示日历的日期的事件列表 我还需要能够从列表中删除事件 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
  • Java如何处理IF语句和效率

    我只是好奇 Java 实际是如何工作的if声明 注意 当我在下面说 组件 时 我指的是语句检查的各个部分 例如a b c 哪个在计算方面更有效 if a b c do stuff or if a if b if c do stuff 我之所
  • 从 MySql 迁移:MariaDB 服务器意外关闭客户端连接

    由于许可 商业使用原因 我们正在从 MySql 迁移到 MariaDB 我们已经成功用 MariaDB 客户端 jar 替换了 MySql 连接器 jar 第一次更改 现在正在尝试用 MariaDB 服务器替换 MySql 服务器而不更改数
  • 如何将 HTML 转换为保留换行符的文本

    我如何将 HTML 转换为保留换行符的文本 由 br p div 等元素生成 可能使用NekoHTML http nekohtml sourceforge net 或任何足够好的 HTML 解析器 Example Hello br Worl
  • 当按下 flutter 中编写的按钮时,有没有办法运行 python 脚本?

    本质上 我想做的是 按下我在 Flutter 中编程的按钮 当按下该按钮时 Python 脚本应该开始在我的 Android 设备上运行 我想在 python 中使用 youtube dl 用于下载 Youtube 视频 库 但我想知道是否
  • Numpy - 两个矩阵的行之间的协方差

    我需要计算两个不同矩阵的每一行之间的协方差 即第一个矩阵的第一行与第二个矩阵的第一行之间的协方差 依此类推 直到两个矩阵的最后一行 我可以在没有 NumPy 的情况下使用下面附加的代码来完成此操作 我的问题是 是否可以避免使用 for 循环
  • Linux 中如何确定哪个进程正在使用某个端口

    我目前正在其默认端口上运行 RethinkDB 因为如果我将浏览器指向localhost 8080我看到 RethinkDB Web 界面 我想关闭 RethinkDB 并使用以下命令在另一个端口上重新打开它 port offset争论 然
  • 如何反序列化数组 google-gson 内的数组

    我有这样的 JSON Answers Locale Ru Name Name1 Locale En Name Name2 Locale Ru Name Name3 Locale En Name Name4 正如你所看到的 我的数组里面有数组
  • 类型错误:“State”和“State”实例之间不支持“<” PYTHON 3

    我正在尝试利用队列类中的 PriorityQueue 但是 我在将自定义对象放入 PQ 时遇到问题 我已经实施了 cmp 函数如下 def cmp self other return self priority gt other prior
  • 如何处理MaxUploadSizeExceededException

    MaxUploadSizeExceededException当我上传的文件大小超过允许的最大值时 会出现异常 我想在出现此异常时显示错误消息 如验证错误消息 我该如何处理这个异常 以便在 Spring 3 中执行类似的操作 Thanks 这
  • 错误:线条魔术函数

    我正在尝试使用 python 读取文件 但不断收到此错误 ERROR Line magic function user vars not found 我的代码非常基本 names read csv Combined data csv nam
  • Python:计算非整数的阶乘

    我想知道是否有一种快速的 Pythonic 的方法来计算非整数的阶乘 例如 3 4 当然 内置的factorial 函数在Math模块可用 但它仅适用于积分 我不关心这里的负数 你想用math gamma x http docs pytho
  • App Engine、PIL 和叠加文本

    我正在尝试在 GAE 上的图像上覆盖一些文本 现在他们公开了 PIL 库 这应该不是问题 这就是我所拥有的 它有效 但我不禁认为我应该直接写入背景图像 而不是创建单独的覆盖图像然后合并 我可以用吗Image frombuffer http
  • 使用java读取行并映射过滤数据[关闭]

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

随机推荐