Supporting data: "How collective asperity detachments nucleate slip at frictional interfaces"
收藏资源简介:
This repository supports: <strong>T.W.J. de Geus, M. Popović, W. Ji, A, Rosso, M. Wyart. How collective asperity detachments nucleate slip at frictional interfaces. Proc. Natl. Acad. Sci. U.S.A. 2019. doi: 10.1073/pnas.1906551116, arXiv: 1904.07635</strong> In particular, it provides all used data, all codes used to produce this data (including clones to all the used open-source libraries), and simple functions to plot the data. All data and code is free to use under the CC-BY-4 license, but: <em>Please cite the above research article</em> when using code or data (inspired) from this repository (or the open-source projects GooseFEM and GMatElastoPlasticQPot), in addition to this dataset (doi: 10.5281/zenodo.3477938). (c) T.W.J. de Geus | 2019 | contact: tom@geus.me, www.geus.me This work is licensed under a Creative Commons Attribution 4.0 International License. <strong>Contents</strong> In brief Data files Code Plots <strong>1. In brief</strong> All codes (<code>codes/</code>) are written in C++ using a number of open-source libraries (<code>libraries/</code>). All data (<code>data/</code>) is stored in the HDF5 format. All plots (<code>data/</code>) are generated using Python and a number of open-source libraries. All codes are developed and tested on macOS and Linux. The notation used here is consistent with these Unix-based platforms. Windows based compilation and use might differ from the description here. <strong>2. Data files ("data/")</strong> The different ensembles (datasets) are included in different directories in <code>data/</code>. They are distinguished through their directory name that comprises the system size (denoted <code>nx=...</code>) and the shape factor of the Weibull distribution from which the yield strains are drawn (denoted <code>weibull=...</code>). Each ensemble consists of a number of realisations of the random yield strains at the frictional interface. Each realisation is stored in a separate file (<code>id=xxx.hdf5</code>). This file serves as input for the event-driven code (<code>code/Run/main.cpp</code>). This code stores the displacement field at the end of each event-driven step (for which it may take significant time for energy to be minimised). With these displacement fields, all other quantities (stress, strain, plastic strain, ...) can be reconstructed. The relevant reconstructed data for the entire ensemble is collected in <code>EnsembleInfo.hdf5</code>. For the manually triggered avalanches at different stresses (and fixed relative strain increment w.r.t. the last system spanning event) only selected output is stored to limit storage usage (<code>code/AvalancheAfterPush...</code>). Please note that the simulations are stopped when an event becomes system spanning to save on computation time, for this case the output thus does not correspond to a state of mechanical equilibrium. By contrast, any simulation that was not system-spanning does correspond to a state of mechanical equilibrium. <strong>2a. Realisation ("data/.../id=xxx.hdf5")</strong> See code <code>code/Run/main.cpp</code> and generation <code>code/Generate/generate.py</code> Mesh (input)<br> <code>/coor</code>: Nodal coordinates <code>[nnode, ndim]</code> (<code>ndim == 2</code>) <code>/conn</code>: Connectivity <code>[nelem, nne]</code> (<code>nne = 4</code>) <code>/dofs</code>: Degrees-of-freedom (DOF) per node <code>[nnode, ndim]</code> <code>/iip</code>: Prescribed DOFs <code>[n_iip]</code><br> Material model (input)<br> <code>/elastic/elem</code>: Elastic elements <code>[n_elasic]</code> <code>/elastic/G</code>: Shear modulus <code>[n_elasic]</code> <code>/elastic/K</code>: Bulk modulus <code>[n_elasic]</code> <code>/cusp/elem</code>: Elasto-plastic elements <code>[n_cusp]</code> <code>/cusp/G</code>: Shear modulus <code>[n_cusp]</code> <code>/cusp/K</code>: Bulk modulus <code>[n_cusp]</code> <code>/cusp/epsy</code>: Yield strains <code>[n_cusp, n_potentials]</code> <code>/uuid</code>: Unique identifier for the realisation<br> <br> Note that <code>n_elasic + n_cusp == nelem</code><br> Simulation (input)<br> <code>/alpha</code>: Background damping coefficient <code>[nelem]</code> (homogeneous) <code>/rho</code>: Mass density <code>[nelem]</code> (homogeneous) <code>/run/dt</code>: Time-step <code>/run/epsd/kick</code>: Size of the strain kick <code>/run/epsd/max</code>: Local strain at which to stop<br> Output<br> <code>/completed</code>: Completion signal, emitted when <code>/run/epsd/max</code> was reached locally <code>/stored</code>: Stored event-driven step numbers <code>[n_event]</code> <code>/t</code>: Time at the end of each event-driven step <code>[n_event]</code> <code>/kick</code>: Strain kick (yes/no) per event-driven step <code>[n_event]</code> <code>/disp/...</code>: Nodal displacements per event-driven step <code>[nnode, ndim]</code> <strong>2b. Simulation output ("data/.../EnsembleInfo.hdf5")</strong> See code and help <code>code/EnsembleInfo/main.cpp</code>. <strong>2c. Distribution P(x) ("data/.../EnsembleYieldDistance*.hdf5")</strong> See code and help <code>code/EnsembleYieldDistance_stressControl/main.cpp</code> and <code>EnsembleYieldDistance_strainControl/main.cpp</code>. <strong>2d. Manual triggering of events ("data/.../AvalancheAfterPush*.hdf5")</strong> See code and help <code>code/AvalancheAfterPush_stressControl/main.cpp</code> and <code>code/AvalancheAfterPush_strainControl/main.cpp</code>. <strong>3. Code ("code/")</strong> The relevant codes to generate the datasets are referenced above. All non-standard libraries have been cloned under <code>libraries/</code>. Please note that they are subject to evolution: their cloned versions allow one to rerun the code in this dataset, however, for further development one is strongly encouraged to use the latest version. Please check out the development of: GooseFEM (v0.2.3) GMatElastoPlasticQPot (v0.2.1) cpppath (v0.0.7) xtensor (v0.20.8) xtensor-blas (v0.16.1) xtl (v0.6.5) xsimd (v7.2.5) highfive (master) docopt (master) fmt (master) pyxtensor (v0.0.5) GooseMPL (v0.2.24) GooseEYE (v0.2.0) h5py (master) To compile code, follow the following structure: <pre>cd code/... mkdir build cmake .. make</pre> Then to run use: <pre>./Run ...</pre> (use <code>./Run --help</code> for help, and/or read the code). For some codes a support function generates commands. They can be generated and run as follows: <pre>python makeJob.py source commands.txt</pre> <strong>4. Plots ("data/.../*.py")</strong> Basic plot functions are included with the datasets. Note that all scripts require <code>numpy</code>, <code>matplotlib</code>, <code>h5py</code>, and <code>GooseMPL</code> to be installed. The latter two are included here, the other two are considered standard.
本仓库支持以下研究:<strong>T.W.J. de Geus, M. Popović, W. Ji, A. Rosso, M. Wyart. 摩擦界面集体微凸体脱粘如何引发滑移. 《美国国家科学院院刊》, 2019. doi: 10.1073/pnas.1906551116, arXiv: 1904.07635</strong> 具体而言,本仓库包含研究使用的全部数据、生成数据所用的全部代码(包括所用开源库的克隆副本),以及用于可视化数据的简易函数。所有数据与代码均可在CC-BY-4许可下免费使用,但:<em>若从本仓库(或开源项目GooseFEM、GMatElastoPlasticQPot)使用代码或数据(或受其启发的内容),除需引用本数据集(doi: 10.5281/zenodo.3477938)外,还请引用上述研究论文</em>。© T.W.J. de Geus | 2019 | 联系方式:tom@geus.me, www.geus.me 本作品采用知识共享署名4.0国际许可协议进行许可。 <strong>内容概览</strong> 简言之 数据文件、代码、可视化图表 <strong>1. 简言之</strong> 所有代码(<code>codes/</code>)采用C++编写,依赖若干开源库(<code>libraries/</code>)。所有数据(<code>data/</code>)以HDF5(Hierarchical Data Format 5)格式存储。所有绘图脚本(<code>data/</code>)采用Python与若干开源库生成。所有代码均在macOS与Linux平台上开发并测试,本文采用的符号约定与这些类Unix平台保持一致。基于Windows平台的编译与使用可能与本文描述存在差异。 <strong>2. 数据文件(<code>data/</code>目录)</strong> 不同的集合(数据集)存储在<code>data/</code>下的不同子目录中,通过目录名区分:目录名包含系统规模(记为<code>nx=...</code>)与威布尔分布(Weibull)的形状因子,该因子用于生成屈服应变(记为<code>weibull=...</code>)。每个集合包含若干组摩擦界面处随机屈服应变的实现样本。每组样本存储于独立文件(<code>id=xxx.hdf5</code>)中,该文件作为事件驱动代码(<code>code/Run/main.cpp</code>)的输入。该代码会在每个事件驱动步骤结束时存储位移场(完成能量最小化可能需要较长时间)。基于这些位移场,可重构得到所有其他物理量(应力、应变、塑性应变等)。整个集合的相关重构数据汇总于<code>EnsembleInfo.hdf5</code>中。针对不同应力下手动触发的滑移雪崩(以及相对于最后一次系统贯穿事件的固定相对应变增量),仅存储选定的输出以限制存储空间(<code>code/AvalancheAfterPush...</code>)。请注意,当事件发生系统贯穿时,模拟会停止以节省计算时间,此时的输出并不对应力学平衡状态;反之,未发生系统贯穿的模拟结果均对应力学平衡状态。 <strong>2a. 单组样本(<code>data/.../id=xxx.hdf5</code>)</strong> 详见代码<code>code/Run/main.cpp</code>与生成脚本<code>code/Generate/generate.py</code>。 <br>网格(输入数据): <code>/coor</code>:节点坐标,维度为<code>[nnode, ndim]</code>(<code>ndim == 2</code>) <code>/conn</code>:单元连接关系,维度为<code>[nelem, nne]</code>(<code>nne = 4</code>) <code>/dofs</code>:每个节点的自由度(Degree-of-Freedom, DOF),维度为<code>[nnode, ndim]</code> <code>/iip</code>:约束自由度,维度为<code>[n_iip]</code> <br>材料模型(输入数据): <code>/elastic/elem</code>:弹性单元,维度为<code>[n_elastic]</code> <code>/elastic/G</code>:剪切模量,维度为<code>[n_elastic]</code> <code>/elastic/K</code>:体积模量,维度为<code>[n_elastic]</code> <code>/cusp/elem</code>:弹塑性单元,维度为<code>[n_cusp]</code> <code>/cusp/G</code>:剪切模量,维度为<code>[n_cusp]</code> <code>/cusp/K</code>:体积模量,维度为<code>[n_cusp]</code> <code>/cusp/epsy</code>:屈服应变,维度为<code>[n_cusp, n_potentials]</code> <code>/uuid</code>:单组样本的唯一标识符 <br>注意:<code>n_elastic + n_cusp == nelem</code> <br>模拟设置(输入数据): <code>/alpha</code>:背景阻尼系数,维度为<code>[nelem]</code>(均匀分布) <code>/rho</code>:质量密度,维度为<code>[nelem]</code>(均匀分布) <code>/run/dt</code>:时间步长 <code>/run/epsd/kick</code>:应变冲击的幅值 <code>/run/epsd/max</code>:停止模拟的局部应变阈值 <br>输出数据: <code>/completed</code>:完成信号,当局部达到<code>/run/epsd/max</code>时触发 <code>/stored</code>:存储的事件驱动步骤编号,维度为<code>[n_event]</code> <code>/t</code>:每个事件驱动步骤结束时的时间,维度为<code>[n_event]</code> <code>/kick</code>:每个事件驱动步骤是否施加了应变冲击,维度为<code>[n_event]</code> <code>/disp/...</code>:每个事件驱动步骤的节点位移,维度为<code>[nnode, ndim]</code> <strong>2b. 集合汇总输出(<code>data/.../EnsembleInfo.hdf5</code>)</strong> 详见代码与帮助文档<code>code/EnsembleInfo/main.cpp</code>。 <strong>2c. 分布P(x)(<code>data/.../EnsembleYieldDistance*.hdf5</code>)</strong> 详见代码与帮助文档<code>code/EnsembleYieldDistance_stressControl/main.cpp</code>与<code>code/EnsembleYieldDistance_strainControl/main.cpp</code>。 <strong>2d. 手动触发事件(<code>data/.../AvalancheAfterPush*.hdf5</code>)</strong> 详见代码与帮助文档<code>code/AvalancheAfterPush_stressControl/main.cpp</code>与<code>code/AvalancheAfterPush_strainControl/main.cpp</code>。 <strong>3. 代码(<code>code/</code>目录)</strong> 生成数据集的相关代码已在上方提及。所有非标准开源库均已克隆至<code>libraries/</code>目录下。请注意,这些库处于持续迭代中:克隆的副本可确保本数据集的代码可重复运行,但如需进一步开发,强烈建议使用最新版本。请关注以下项目的开发进展: GooseFEM(v0.2.3)、GMatElastoPlasticQPot(v0.2.1)、cpppath(v0.0.7)、xtensor(v0.20.8)、xtensor-blas(v0.16.1)、xtl(v0.6.5)、xsimd(v7.2.5)、highfive(master分支)、docopt(master分支)、fmt(master分支)、pyxtensor(v0.0.5)、GooseMPL(v0.2.24)、GooseEYE(v0.2.0)、h5py(master分支)。 代码编译流程如下: <pre>cd code/... mkdir build cmake .. make</pre> 运行代码的命令格式为: <pre>./Run ...</pre> (可使用<code>./Run --help</code>获取帮助,或直接查阅代码)。部分代码可通过辅助函数生成运行命令,生成并运行方式如下: <pre>python makeJob.py source commands.txt</pre> <strong>4. 可视化图表(<code>data/.../*.py</code>)</strong> 数据集附带基础绘图函数。请注意,所有脚本均需安装<code>numpy</code>、<code>matplotlib</code>、<code>h5py</code>与<code>GooseMPL</code>,其中后两个库已包含在本仓库中,其余两个为标准Python库。



