温室气体排放更敏感的模型(即更高的平衡气候敏感性(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代码实现) 的相关文章

  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 从 sbt 程序集运行 uber jar 会导致错误:无法找到或加载主类

    我有一个使用 sbt 程序集插件打包为 uber jar 的 Spark 作业 这build sbt指定一个可运行的 main 作为生成的 uber jar 的目标 mainClass in assembly Some com foo Ba
  • 如何制作无限的jscrollpane?

    我之前已经实现过拖动滚动 但是创建无限滚动窗格的最佳方法是什么 当然不会有任何滚动条 我将实现拖动滚动 我想做的是在无限表面上实现动态加载 EDIT 当然 它实际上不会是无限的 我想问如何伪造它 您可以执行以下操作 AdjustmentCl
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • 如何使用 Guava 连接字符串?

    我写了一些代码来连接字符串 String inputFile for String inputLine list inputFile inputLine trim 但我不能使用 连接 所以我决定使用 Guava 所以我需要使用Joiner
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 为什么现在()? (客观化)

    为什么我想要异步加载 Objectify 实体 异步加载到底意味着什么 根据客观化有关加载的文档 https code google com p objectify appengine wiki BasicOperations Loadin
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 无法映射 ftl 文件中的 jsonRequest 属性

    我想在 FTL 文件中映射下面的 json 文件市场和子市场字段 但是当我尝试下面的代码时 它没有映射 有人可以帮助我吗 我从 2 天开始就无法映射它 Json请求 ProcessOrderRequest prevalidationMode
  • 如何将两列 pandas Dataframe 移动并堆叠为一列?

    我有一个下面提到的数据框 ETHNIC SEX USUBJID 0 HISPANIC OR LATINO F 16 1 HISPANIC OR LATINO M 8 2 HISPANIC OR LATINO Total 24 3 NOT H
  • AWS 将 MQTT 消息存储到 DynamoDB

    我构建了一个定期发送 MQTT 消息的 python 脚本 这是发送到后端的 JSON 字符串 Id 1234 Ut 1488395951 Temp 22 86 Rh 48 24 在后端 我想将 MQTT 消息存储到 DynamoDB 表中
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • py2exe ImportError:没有名为 的模块

    我已经实现了一个名为 myUtils 的包 它由文件夹 myUtils 文件 组成 init py 和许多名称为 myUtils 的 py 文件 该包包含在 myOtherProject py 中 当我从 Eclipse 运行它们时可以找到
  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • 如何使用剪辑来减少绘画时间?

    我正在尝试使用 Clip 来减少 CPU 负载 但剪辑在屏幕上留下了一些我似乎无法摆脱的垃圾 另外 打开和关闭剪辑似乎对 CPU 负载没有影响 在任一情况下 大部分时间似乎都花在重绘管理器和绘制缓冲图像上 import static jav
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐