npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

rsf-friction

v1.3.0

Published

速率-状态摩擦定律(Rate-and-State Friction, RSF)计算库 — 三变量(材质/压力/速度)计算摩擦力

Readme

rsf.js · 速率-状态摩擦定律计算库

基于 Dieterich (1979)Ruina (1983)速率-状态摩擦定律(Rate-and-State Friction, RSF)的纯 JavaScript 计算库,可复现粘滑 (stick-slip)速度阶跃直接效应静态对数愈合等摩擦物理现象。

核心场景:用户只需输入「接触面材质、接触面受压力、物体运动速度」三个变量,即可得到对应的摩擦力数值。

License: MIT


目录


为什么需要速率-状态摩擦定律?

经典物理课本里的库仑摩擦定律 F = μ·N 把摩擦系数 μ 当作一个常数,只与材料有关。这在很多简单场景下够用,但它无法解释三个真实的摩擦现象:

  1. 摩擦力随滑动速度变化——真实界面的摩擦系数并不是常数:速度突然增大时摩擦会瞬时增大(直接效应),随后又随滑动演化(演化效应)。有的材料速度越快越"滑"(速度弱化),有的则越"涩"(速度强化)。
  2. 粘滑 (stick-slip)——两块接触面相对滑动时,常出现"粘住→突然滑动→再粘住"的锯齿形周期振荡(如刹车啸叫、门轴吱嘎、地震断层错动)。库仑定律无法产生这种周期性失稳。
  3. 静止愈合 (healing)——接触面静止越久,重新起滑所需的静摩擦越大(摩擦随时间对数增长)。库仑定律完全不包含时间因素。

速率-状态摩擦定律通过引入一个状态变量 θ(描述接触面的滑移历史与接触时间)解决了这些问题,统一刻画了速度依赖、粘滑失稳与时间愈合,是当今**地震学(断层摩擦)、岩石力学、精密机械与微机电系统(MEMS)**等领域描述摩擦的标准模型。


物理模型

本构关系

RSF 定律把摩擦系数写成速度 V 与状态变量 θ 的函数:

μ(V,θ) = μ₀ + a·ln(V/V₀) + b·ln(V₀θ/Dc)     —— 摩擦系数
F      = μ·N                                 —— 摩擦力(N 为法向力)
μ_ss(V)= μ₀ + (a−b)·ln(V/V₀)                 —— 稳态摩擦系数

各参数的物理含义:

| 参数 | 含义 | |---|---| | μ₀ | 参考速度 V₀ 下的摩擦系数 | | a | 直接效应系数:速度阶跃时摩擦的瞬时响应强度 | | b | 演化效应系数:摩擦随滑移历史演化的强度 | | Dc | 临界滑移距离:状态演化的特征长度 | | θ | 状态变量:接触面的"记忆"(滑移历史 / 接触时间) |

速度依赖a − b 的符号决定:

  • a − b < 0速度弱化——速度越快摩擦越小,可能发生粘滑失稳;
  • a − b ≥ 0速度强化——速度越快摩擦越大,稳定滑动。

状态演化律

状态变量 θ 按以下任一演化律随时间变化(dθ/dt):

  • Dieterich 老化律1 − Vθ/Dc(静止时 θ 随时间线性增长 → 产生愈合)
  • Ruina 滑移律−(Vθ/Dc)·ln(Vθ/Dc)
  • PRZ(Perrin-Rice-Zheng):1 − (Vθ/(2Dc))²
  • Nagata 修正律1 − Vθ/Dc − (c/b)·θ·dμ/dt

三种求解模型

| 模型 | 类型 | 用途 | |---|---|---| | RateStateFriction | RSF 本构律 | 由速度/状态求摩擦系数与摩擦力(单点计算) | | SpringBlockSlider | 准静态弹簧-滑块 | 速度阶跃、静止愈合等稳定滑动实验 | | StickSlipSlider | 准动力弹簧-滑块 | 复现有界的锯齿形粘滑循环 |

其中 StickSlipSlider 采用 Rice (1993) 的准动力模型(忽略惯性、保留辐射阻尼 η = N/(2c_s)),以显式"黏着/滑动"状态机交替,避免准静态模型在失稳时速度发散的问题。

粘滑判据

粘滑发生在速度弱化 + 低刚度的条件下:

a − b < 0   且   k < k_crit = N·(b−a)/Dc

其中 k 为加载系统刚度,k_crit 为临界刚度。


特性

  • 零依赖:单文件 UMD 模块,浏览器(<script>)与 Node.js(require)通用;
  • 三变量便捷接口 computeFriction(材质, 法向力, 速度):一行代码得到摩擦力;
  • 内置 71 种接触对材质参数表(14 种岩石含 RSF 参数,57 种工程材料含库仑 μ/μ_s,均明确标注接触面对,见 docs/materials-table.md);
  • 自适应 Cash-Karp RK45 求解器:速度阶跃直接效应、稳态摩擦、静态愈合均与解析解逐位吻合;
  • 四种状态演化律:Dieterich 老化律、Ruina 滑移律、PRZ、Nagata;
  • 自带 Canvas 可视化演示页demo/index.html),直观展示锯齿形粘滑曲线;
  • TypeScript 类型定义:附带 index.d.ts,TS 项目开箱即用类型提示;
  • 键名即接触对computeFriction(材质, ...) 的材质键名——自配对(钢-钢、花岗岩-花岗岩)用单名(steelgranite),异材质用「主材质_副材质」成对键名(aluminum_steelpom_steel);特例 stainless_steel(不锈钢-不锈钢)单名含下划线属材质名本身;
  • 自动化测试:内置 node:test 测试套件(npm test),核心物理关系与解析解逐位吻合。

快速开始

方式一:npm 安装(推荐)

npm install rsf-friction
const RSF = require('rsf-friction');
const F = RSF.computeFriction('steel', 1000, 0.5).frictionForce;  // 420 N

TypeScript 项目自带类型定义(index.d.ts),无需额外安装 @types 包。

方式二:CDN 引入(浏览器,零安装)

<script src="https://cdn.jsdelivr.net/npm/[email protected]/rsf.js"></script>
<script>
  const 结果 = RSF.computeFriction('granite', 1000, 1e-5);  // 材质、法向力(N)、速度(m/s)
  console.log(结果.frictionForce);  // 摩擦力 (N)
  console.log(结果.mu);             // 摩擦系数 μ
</script>

也可用 unpkg:https://unpkg.com/[email protected]/rsf.js

方式三:从 GitHub 安装开发版

npm install github:Rro-123/rsf-friction

方式四:直接下载文件

jsDelivrGitHub Releases 下载 rsf.js 放入项目,用 <script src="rsf.js"></script>(浏览器)或 require('./rsf.js')(Node)引入。

TypeScript 用户

已附带 index.d.ts 类型定义,TS 项目可直接获得完整类型提示:

import { RateStateFriction, computeFriction } from 'rsf-friction';

const f = new RateStateFriction({ mu0: 0.6, a: 0.008, b: 0.012, Dc: 5e-6, V0: 1e-6 });
const mu: number = f.muSS(1e-5);
const r = computeFriction('granite', 1000, 1e-5);   // ComputeFrictionResult

详细文档

完整的使用说明见 docs/guide.md,涵盖:三变量(材质 / 压力 / 速度)到库输入的映射、库仑与 RSF 两种计算模式、内置材质参数表、嵌入仿真实验的代码示例、粘滑等进阶用法、完整 API 与注意事项。


在线演示

👉 在线体验(GitHub Pages)https://rro-123.github.io/rsf-friction/(自动跳转至演示页)

启用 GitHub Pages 后生效:仓库 Settings → Pages → Source 选 main 分支(根目录 index.html 为跳转入口,实际演示页位于 demo/index.html)。

本地使用:直接打开 demo/index.html 即可,包含四个面板:

  1. 核心摩擦计算器 — 三变量 → μ、F(附 μ_ss(V) 曲线);
  2. 弹簧-滑块粘滑仿真 — 稳定性判据、滑移事件表、μ(t) 锯齿曲线、V(t) 尖峰曲线;
  3. 速度阶跃实验 — 直接效应 a·ln(V₂/V₁)、稳态变化 (a−b)·ln(V₂/V₁)
  4. 静态愈合 — 静摩擦随静止时间的对数增长。

第三方致谢

本库为独立 JavaScript 实现,未复制下列项目源代码,仅参考其物理模型与求解思路(RSF 方程本身属公开科学文献)。详见 rsf.js 头部注释:

| 项目 | 许可证 | |---|---| | jrleeman/rsfmodel | MIT | | newton-physics/newton | Apache 2.0 | | EQcycle_failure_laws | GPL v3 | | RSF_solvers | 无 LICENSE(保留所有权利) | | Lubrication-Dynamics-with-Friction | 无 LICENSE(保留所有权利) |


项目结构

├── rsf.js          # 核心库(UMD,零依赖,浏览器 & Node 通用)
├── index.d.ts      # TypeScript 类型定义
├── index.html      # GitHub Pages 跳转入口(→ demo/)
├── demo/           # Canvas 可视化演示页(index.html,含图表)
├── docs/           # 文档(guide.md 使用指南 + materials-table.md 材质参数表)
├── materials/      # 材质数据(materials.json,机器可读)
├── tests/          # 自动化测试(node:test,npm test)
├── README.md       # 本文件
├── LICENSE         # MIT 许可证
├── package.json    # npm 元数据
└── .gitignore      # 忽略规则

许可证

本项目采用 MIT License