地球科学盒子建模工具包
项目描述
ESBMTK - 地球科学盒子建模工具包
ESBMTK 是一个 python 库,旨在简化地球科学中的典型盒子建模项目。一般的重点是使盒子建模在课堂教学中更加平易近人。性能和可扩展性目前不是优先事项。具体来说,求解器只是一个简单的正向欧拉方案,因此不能很好地处理僵硬的问题。
目前,它将计算储层和通量中的质量/浓度,包括同位素比率。它提供了多种类,允许创建和操作输入信号以及生成图形结果。
消息
-
0.8.0.0
- 清理现在严格分层的命名方案。
- 批量连接字典现在必须指定为
source_to_sink而不是source2sink. - 连接命名方案已修改。有关详细信息,请参阅
esbmtk.connect.__set_name__()文档。 - 模型浓度单位现在必须匹配“摩尔/升”或“摩尔/千克”。浓度仍可指定为
mmol/l或mmol/kg,但模型输出将以摩尔/升或千克为单位。目前,该模型不提供 mol/l 到 mol/kg 的自动转换。因此,您必须以一致的方式指定单位。 - SeawaterConstants 类现在总是以 mol/kg 解决方案返回值。买者自负。
- SeawaterConstants 类不再接受“模型”关键字
- 他的一切都将打破现有的模式。
- 默认情况下,模型假设它们处理理想水,即密度等于 1。要使用海水,您必须设置
ideal_water=False. 在这种情况下,您还应该将concentration_unit关键字设置为'mol/kg'(解决方案)。 - 现在有几个类需要“注册”关键字。您可能需要相应地修复您的代码
-
通量和连接汇总方法可以通过多个关键字进行过滤。提供以下格式的过滤器字符串,
"keyword_1 keyword_2它只会返回匹配两个关键字的结果。 -
删除了对 nptyping 和 number 库的依赖
-
0.7.3.9 移至 setuptools 构建系统。代码丢失修复WRT同位素计算,碳酸盐模块中的小修复。
-
3 月 2 日0.7.3.4现在
Flux_summary支持exclude关键字。Hot 修复了气体交换代码中的一个错误,该错误影响了大气总质量的计算。目前,大气的质量被视为常数。 -
0.7.3.0 默认情况下不再保留通量数据。这会节省大量内存。esbmtk 现在需要 python 3.9 或更高版本,并且还依赖于
osandpsutil. scale with flux 过程现在使用ref_flux关键字而不是ref_reservoirs. 模型必须相应地调整他们的脚本。esbmtk 对象默认不再提供增量值。相反,它们需要在后处理步骤中通过M.get_delta_values(). 风化连接中的f_0关键字现在称为rate。使用 old 关键字将导致单元错误。 -
1 月 8日0.7.2.2 修正了几个同位素计算回归。添加了 31 个单元测试。
-
1 月 5 日,0.7.2.0 重新设计了通量和连接的命名方案。这将破坏现有的模型定义。几个错误修正,同位素计算目前被打破。
-
12 月 31日,0.7.1.2 重写了信号类。它现在支持超出模型域的钟形曲线类型信号和剪辑信号。建议更新到python 3.9
-
12 月 10日,0.7.1.1 关键字解析现在只检查已知关键字,但会忽略所有未知关键字。这简化了将关键字传递给底层实例的过程。修复了很少使用的例程中的一些索引问题。通量现在按照它们创建的顺序进行处理。添加
weathering为新的连接类型。 -
8 月 10日,在海水化学模块中增加了氟化氢和硫酸氢盐的 KF 和 KS 值。
-
8 月 2日, 0.7.0.0 Python 命名空间现在是默认的。Esbmtk 现在支持碳酸盐化学。可以为跟踪总碱度和溶解无机碳的储层组计算碳酸氢盐和碳酸盐离子浓度等示踪剂。该函数
add_carbonate_system_1会将这些示踪剂添加到给定的储层组中。该函数add_carbonate_system_2将按照 <boudreau-2010-ongoin-trans> 的方法另外计算碳酸盐埋藏和溶解通量。非常感谢 Tina 和 Mahrukh,他们开发并测试了碳酸盐化学模块。请注意,当前版本尚未更新 github 存储库中的文档或示例。 -
7 月 28日,esbmtk 现在支持 python 命名空间。默认仍然是在全局命名空间中注册所有 esbmtk 对象。但是,在需要将模型集成到 python 代码中的情况下,您现在可以
register = 'local'在模型声明中设置关键字。在这种情况下,所有模型对象都遵循分层命名方案,例如,表示属于模型M.A_sb.DIC的储层组中的 DIC 浓度。A_sbM -
7 月 20日,模型对象现在提供了一个
sub_sample_data()在绘图之前将所有模型数据重新采样到 1000 个数据点的默认网格。 -
7 月 17日,
ExternalCode是一个允许集成任意代码的新类。这取代了VirtualReservoir-no_set类 -
6 月 17日,数据和状态文件现在存储在子目录中。现在可以将模型运行分解为单独的段,从而允许长时间运行模型而不会耗尽内存。请参阅 中的
step_limit参数Model。ESBMTK 现在会在保存(或绘制)数据之前自动将数据点的数量减少到 1000 个。请参阅 中的number_of_datapoints参数Model。 -
5 月 26日,0.6.0.0 更改了
Generic_Function该类的数据结构。这将破坏以前对VirtualReservoir_no_set实例的任何使用。有关如何更新,请参阅 API 文档。更改了所有进程类的数据结构。不应该有面向用户的更改。 -
5 月 13日,0.5.1.3 多元回归修复,
ref关键字现在称为ref_reservoirs. 添加了两个新类Reservoir_no_set和VirtualReservoir_no_set. 这两个类都不知道对其数据的更改。=Reservoir_no_set只会响应通量而改变,但不会更新浓度数据等。同样,VirtualReservoir_no_set其值只会响应相关函数而改变 -
5 月 5日,0.5.0.1 Datafield 类现在接受数据集列表。这有助于将一起属于单个图形的数据分组。
-
4 月 26日进一步更改组连接中的命名方案。连接组对象现在由组名和连接名组成,例如,
sb2@db.PO4_2_PO4它表示从sb到db传输物种的连接PO4。这与上面引用通量的先前方案相冲突。可以通过添加_F到上述连接名称来引用相应的通量。即,sb2@db.PO4_2_PO4_F。由于这破坏了以前的代码,因此版本更新为 0.5.0.0 -
4 月 25日v 0.4.3.0 ESBMTK 现在有 3 个不同的求解器。下面提到的混合求解器,以及快约 10 倍的完整 numba 求解器。不过,后者还不支持所有连接属性。求解器是通过 run 方法中的可选求解器关键字选择的:
M.run(solver = "hybrid")或M.run(solver = "numba"). 两者都会产生大约 3 到 5 秒的启动开销。为了使 numba 求解器工作,GenericFunction和VirtualReservoir类的接口定义从 6 个参数更改为 3 个参数,并且所有 3 个参数都必须存在并遵循严格的结构(请参阅类定义)。这也需要改变碳酸盐化学模块,特别是计算 pH 值和碳酸盐碱度的函数。该文档现在可在https://uliw.github.io/esbmtk/ -
4 月 13日:重写了现在快 3 倍的求解器。在求解器代码中添加了 numba,但是,性能提升目前只有几个百分点。向模型类添加了绘图方法。此方法将绘制给定列表中的任何对象。这对于只对结果子集感兴趣的较大模型很有用。
-
4 月 10日:希望对命名方案进行最后一次调整。所有通量都属于一个连接(参见
model.connection_summmary()),并在各自的连接命名空间(即sb2ib.flux_name)中注册。现在,所有进程都在各自的通量名称空间中注册,即sb2ib.flux_name.process_name. 所有这些都可以用 info 方法查询,例如,sb2ib.flux_name.process_name.info() -
4 月 6日,添加了一些有助于批量创建水库和连接的功能(即
create_reservoirs,create_bulk_connections)。hypsometry 类现在是 Model 对象的一部分,并且现在具有计算给定深度间隔中包含的体积的方法。要计算海洋体积,您可以调用,例如,Model.hyp(0,-6000)查看 sealevel 模块的 api 文档了解详细信息。储层现在可以通过其几何形状而不是体积或质量来指定。请参阅水库类的文档。在计算模型结果之前使用 DataField 类现在将打印警告
-
4月1日。增加
carbonate_system()了碳酸盐化学模块的功能。该功能简化了 H +和碳酸盐碱度储层的设置。有关详细信息,请参阅 api 文档。- 3 月 28日向模型类添加了一个
flux_summmary()和connection_summary()方法。
- 3 月 28日向模型类添加了一个
-
3 月 27日,0.4.0.5 添加了 hypsometry 类,它提供了 -6000 mbsl 和 1000 asl 之间的 hypsometry 的样条表示。该类提供了
area()计算两个深度日期之间的海底表面积的方法。有关详细信息,请参阅在线 api 文档。 -
3 月 26日,0.4.0.4
write_state和read_state方法现在与 ReservoirGroups 兼容 -
3 月 18日esbmtk 0.4.0.0 现在有一个碳酸盐化学模块,该模块目前包括从 TA 和 DIC 计算 PCO 2、CA 和 H +浓度的方法。海水类别已重新命名
SeawaterConstants,可在给定的一组温度、盐度和压力条件下访问一组有限的海水物种浓度及其 K 和 Pk 常数。此版本还包括对Connnection和ConnectionGroup类的一些重构。这很可能破坏了某些连接类型。 -
3 月 13日,清理了
k_value现在仅限于flux_balance连接类型的关键字的使用。在所有其他情况下,请改用scale关键字。旧关键字仍在工作,但会打印一条警告消息。describe()现在调用该方法info()。 -
3 月 11日,添加了一个海水类,可以访问 K 值和浓度。
-
3 月 10日,代码文档现已在https://uliw.github.io/esbmtk/上提供
-
3 月 6日,绘图水库函数现在采用附加文件名参数,例如 (fn="foo.pdf")。信号现在接受可选的储层参数。这简化了信号创建,因为可以隐式创建源和储层连接。
-
2 月 28日,增加了一个 VirtualReservoir 类。此类允许定义依赖于用户定义函数的执行的水库。有关详细信息,请参阅类文档。
现在可以为每个 Reservoir、Flux、Signal、Datafield 和 VirtualReservoir 独立设置显示精度
-
1 月 30日,增加了氧和氮物种的定义
-
1 月 18日,读取以前的模型状态现在更加稳健。它不再要求模型模型具有相同数量的通量。它将尝试按名称匹配,并为无法匹配的助焊剂打印警告。
-
1 月 12日,模型对象现在接受
plot_style关键字 -
1 月 5日,连接器对象和通量现在使用更一致的命名方案:
Source_2_Sink_Connector,并且关联的通量被命名为Source_2_Sink_Flux。作用于助焊剂的过程被命名为Source_2_Sink_Pname模型类型 (
m_type) 现在默认为mass_only,并将忽略同位素计算。用于m_type = "both"获取旧行为。 -
12 月 30日,连接对象现在有一个通用的更新方法,允许更新所有参数或所有参数的子集
-
12 月 23 日,连接对象现在具有允许在连接建立后更新连接属性的基本机制。如果需要,更新将触发连接类型的更改并重新初始化相关进程。目前,这适用于改变速率、分馏因子,可能是 delta。
-
12 月 20日,添加了一种新的连接类型 (
flux_balance),它允许两个储层之间的平衡通量,而无需明确指定正向和反向通量。请参阅示例目录中的平衡示例。 -
12 月 9日,添加了基本的日志记录基础设施。向,和类添加
describe()了方法。这将列出有关通量和过程等的详细信息。大量的代码清理和重构。ModelReservoirConnnection -
12 月 7日,当调用不带参数的实例时,它现在返回初始化时使用的值。换句话说,它将打印用于初始化实例的代码。
-
12 月 5日,增加了一个 DataField 类。这允许将模型完成后计算的数据集成到模型摘要图中。
-
11 月 26日物种定义现在接受可选的显示字符串。这允许化学公式的漂亮打印输出。
-
11 月 24日列出存储库的所有连接以及与连接关联的所有进程的新功能。这允许在进程名称上使用帮助系统。用于指定具有更复杂特征的连接的新界面(例如,根据储层浓度调整通量)。这将破坏使用此类连接的现有脚本。请参阅快速入门指南了解如何更改连接定义。
-
11 月 23 日模型现在可以保存其状态,然后可用于初始化后续模型运行。这对于需要旋转阶段才能达到平衡的模型特别有用
-
11 月 18日,开始为选定的模块添加单元测试。向外部数据集添加了单位转换。外部数据现在可以直接与水库相关联。
-
11月5日,发布0.2版本。这个版本现在是单元感知的。
unit因此,数量现在与其单位一起指定,而不是单独的关键字,例如,rate = "15 mol/s"。这会破坏 API,并要求修改现有脚本。因此,我还删除了大部分现有文档,直到我有时间对其进行更新。 -
10 月 27日,添加了有关如何集成用户编写的过程类的文档,添加了一个允许浓度依赖性通量的类。更新了文档,添加了示例
-
10 月 25日,在 github 上首次发布。
贡献
不要害羞。贡献就像使用代码查找错误一样容易,或者您想添加新的流程代码?如果您有足够的空闲时间,ESMBTK 可以使用求解器来解决棘手的问题,或者使用图形界面;-) 请参阅待办事项部分以获取想法。
安装
ESBMTK 依赖于以下 python 版本和库
- 蟒蛇> 3.8
- matplotlib
- 麻木的
- 熊猫
- 打字
- 品脱
如果您使用 conda,建议通过 conda 安装上述内容。如果您使用 pip,安装程序应该会自动安装这些库。ESBMTK 本身可以用 pip 安装
- 点安装 esbmtk
文档
文档已经过时了,目前,最好的办法是代码本身
API 文档位于https://uliw.github.io/esbmtk/esbmtk/index.html
去做
- 展开文档
- 提供更多示例
- 做更多的测试
执照
ESBMTK:通用地球科学盒子模型工具包 版权所有 (C),2020 Ulrich G. Wortmann
本程序是免费软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证条款重新分发和/或修改它,许可证的第 3 版或(由您选择)任何更高版本。
分发此程序的目的是希望它有用,但不提供任何保证;甚至没有对适销性或特定用途适用性的默示保证。有关详细信息,请参阅 GNU 通用公共许可证。
您应该已经收到了一份 GNU 通用公共许可证的副本以及该程序。如果没有,请参阅https://www.gnu.org/licenses/。