曲流迁移的一个简单模型

meanderp的Python项目详细描述


说明

'meanderpy'是一个python模块,它实现了一个简单的曲流数值模型,howard&;Knutson在其1984年的论文中指出,"河流蜿蜒的充分条件:模拟方法"。这是一个运动学模型,其基础是将偏移率计算为上游曲率的加权和;流速不进入方程。曲率通过与迁移率(或可蚀性)常数相乘而转化为"名义迁移率";在Howard&Knutson(1984)的论文中,这是一种基于现场观测的非线性关系,表明曲率与迁移率之间存在复杂的联系。在"meanderpy"模块中,我们使用名义迁移率和曲率之间的简单线性关系,正如最近使用延时卫星图像的研究表明,高曲率导致高迁移率(Sylvester等人,2019年)。

安装

pip install meanderpy

用法

上面的草图显示了三个"meanderpy"组件:通道、截断、通道带。它们被实现为类;"channel"和"cutoff"由它们的宽度、深度和x、y、z中心线坐标定义,"channelbelt"是channel和cutoff的集合。此外,"channelbelt"对象还有一个"cl_times"和一个"cutoff_times"属性,用于指定通道的年龄和截止时间。此年龄与模拟的开始时间(=第一个通道,年龄=0.0)有关。

可以使用"generate_initial_channel"函数创建初始通道对象。这将创建一条直线,并添加一些噪波。但是,可以使用任意一组x、y、z、w、d变量创建通道(然后用作通道带中的第一个通道)。

ch=mp.generate_initial_channel(W,D,Sl,deltas,pad,n_bends)# initialize channelchb=mp.ChannelBelt(channels=[ch],cutoffs=[],cl_times=[0.0],cutoff_times=[])# create channel belt object

一组合理的输入参数如下:

W=200.0# channel width (m)D=16.0# channel depth (m)pad=100# padding (number of nodepoints along centerline)deltas=50.0# sampling distance along centerlinenit=1500# number of iterationsCf=0.03# dimensionless Chezy friction factorcrdist=W# threshold distance at which cutoffs occurkl=60.0/(365*24*60*60.0)# migration rate constant (m/s)kv=3*10*5.0E-13# vertical slope-dependent erosion rate constant (m/s)dt=0.1*(365*24*60*60.0)# time step (s)dens=1000# density of water (kg/m3)saved_ts=20# which time steps will be savedn_bends=30# approximate number of bends you want to modelSl=0.0# initial slope (setting this to non-zero results in instabilities in long runs)

"meanderpy"的核心功能内置在"channelbelt"类的"migrate"方法中。这是计算迁移率并将通道中心线移动到其新位置的函数。通过将"migrate"方法应用于channelbelt实例,可以进一步迁移channelbelt的最后一个通道。

chb.migrate(nit,saved_ts,deltas,pad,crdist,Cf,kl,kv,dt,dens)# channel migration

可以使用"plot"方法可视化channelbelt对象。这将创建河道带中所有河道和断流的地图;有两种绘图样式:"地层"视图和"形态"视图(见下文)。形态学的观点试图解释一个事实,即较老的点酒吧和牛津湖往往逐渐被植被覆盖。

# migrate an additional 1000 iterations and plot resultschb.migrate(1000,saved_ts,deltas,pad,crdist,Cf,kl,kv,dt,dens)fig=chb.plot('strat',20,60)

可以使用"create_movie"方法创建一系列电影帧(PNG格式):

chb.create_movie(xmin,xmax,plot_type,filename,dirname,pb_age,ob_age,scale,end_time)

帧必须在"meanderpy"之外组装成动画。

建立三维模型

"meanderpy"包含构建三维地层模型的功能。但是,此功能与中心线生成分离,主要是因为生成所有中心线及其整个长度的曲面。相反,只有在生成channelbelt对象之后才创建三维模型;通过指定xmin、xmax、ymin、ymax坐标,或通过使用matplotlib"ginput"命令单击域的左上角和右下角来定义模型域:

河流三维模型的重要参数如下:

Sl=0.0# initial slope (matters more for submarine channels than rivers)t1=500# time step when incision startst2=700# time step when lateral migration startst3=1400# time step when aggradation startsaggr_factor=4e-9# aggradation rate (in m/s, it kicks in after t3)h_mud=0.4# thickness of overbank deposit for each time stepdx=10.0# gridcell size in meters

在创建中心线之前,必须指定前五个参数。河流模型中的初始坡度(SL)最好设置为零,因为曲流河中的典型坡度非常低,并且模型表面会看到与沿河道坡度变化相关的伪影[这与较陡的海底航道模型无关]。T1是切口开始的时间步;T1之前,中心线有时间形成一些弯曲。在时间t2,切口停止,河道仅横向迁移到t3;这是沉积开始的时间。切口速率(如果SL设置为零)由数量"Kv x Dens x 9.81 x D x Dt x 0.01"(好像斜率为0.01,但当然不是),其中Kv是垂直切口速率常数。这种方法不需要新的切口速率常数。沉积速率由"aggr_factor x dt"(因此"aggr_factor"必须是一个小数字,因为它是以m/s为单位测量的)。"h_mud"是每个时间步长中的最大漫滩沉积物厚度,"dx"是网格单元大小(单位:m)。"泥浆必须足够大,以匹配河道沉积速率;否则会产生奇怪的人工制品。

Jupyter笔记本有两个例子可以用来建立河流和海底航道系统的三维模型。"plot-xSection"方法可用于在给定的x(像素)坐标处创建横截面(这是函数的第一个参数)。第二个参数确定用于不同相的颜色(在本例中:棕色、黄色、棕色rgb值)。第三个参数是垂直放大。

fig1,fig2,fig3=chb_3d.plot_xsection(343,[[0.5,0.25,0],[0.9,0.9,0],[0.5,0.25,0]],4)

该函数还绘制了基底侵蚀面和最终地形面。下面显示了一个示例地形表面和放大的横截面。

相关出版物

如果您在工作中使用meanderpy,请考虑引用以下一种或多种出版物:

Sylvester,Z.,Durkin,P.,和Covault,J.A.,2019年,《高曲率驱动河流曲流:地质学》,第47卷,第263-266页,doi:10.1130/G45608.1

Sylvester,Z.,和Covault,J.A.,2016年,《海底水道早期演化期间与截止点相关的小点的开发:地质学》,第44卷,第835-838页,doi:10.1130/G38397.1

Covault,J.A.,Sylvester,Z.,Hubbard,S.M.,和Jobe,Z.R.,2016年,《海底水道演化的地层记录:沉积记录》,第14卷,第3期,第4-11页,doi:10.2210/sedred.2016.3

西尔维斯特,Z.,皮尔梅兹,C.和Cantelli,A.,2011,基于河道轨迹的海底河道堤防演变模型:对地层结构的影响:海洋和石油地质,第28卷,第716-727页,doi:10.1016/j.marpetgeo.2010.05.012

致谢

虽然"meanderpy"中的代码是相对最近编写的,但其中实现的许多想法来自于与卡洛斯·皮尔梅兹、亚历山德罗·坎泰利、马特·沃林斯基、尼克·豪斯和杰克·科瓦特的多次讨论。这项工作的资金来自德克萨斯大学奥斯汀分校经济地质局的定量碎屑实验室工业联合会。

许可证

Meanderpy的许可是在Apache许可2.0下的

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
压缩javagzip成员拖车   java REST API设计用于来自不同域但具有公共关系的实体   java什么是camunda中ActivitieEventListener的替代方案?   被困在java上。lang.ArrayIndexOutOfBoundsException:尝试将文本文件读入二叉树时发生4   java我无法加载我的文件?   java Spring安全性验证用户是否输入admin   java Liferay链接到另一个具有特定操作的portlet   aspectj中LTW的java问题   java Spring服务将不会启动   如何在Java中发送SOAP请求头?   流式Java。视频网络错误结束时mp4流损坏   org的java类文件。蹦蹦跳跳。cert.ocsp。找不到BasicoSpresp   Android Java文件。delete()删除文件,然后取消删除自身   java正则表达式:匹配固定短语和以下单词/字符,并在某个单词处停止(和)   java从方法中调用Int?