ocs-calculators 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -4
- package/README.md +47 -5
- package/README_EN.md +11 -5
- package/dist/ampacity/index.cjs +17 -0
- package/dist/ampacity/index.cjs.map +1 -0
- package/dist/ampacity/index.d.cts +68 -0
- package/dist/ampacity/index.d.ts +68 -0
- package/dist/ampacity/index.js +17 -0
- package/dist/ampacity/index.js.map +1 -0
- package/dist/chunk-3ERFRRHZ.cjs +119 -0
- package/dist/chunk-3ERFRRHZ.cjs.map +1 -0
- package/dist/chunk-4UU7WA7N.cjs +107 -0
- package/dist/chunk-4UU7WA7N.cjs.map +1 -0
- package/dist/chunk-5INEDXRY.cjs +69 -0
- package/dist/chunk-5INEDXRY.cjs.map +1 -0
- package/dist/chunk-5Q6IASB2.cjs +101 -0
- package/dist/chunk-5Q6IASB2.cjs.map +1 -0
- package/dist/chunk-746H65EQ.js +91 -0
- package/dist/chunk-746H65EQ.js.map +1 -0
- package/dist/chunk-CVA4EH2K.js +102 -0
- package/dist/chunk-CVA4EH2K.js.map +1 -0
- package/dist/chunk-DGO2DCO5.cjs +19 -0
- package/dist/chunk-DGO2DCO5.cjs.map +1 -0
- package/dist/chunk-FVESJBUD.cjs +95 -0
- package/dist/chunk-FVESJBUD.cjs.map +1 -0
- package/dist/chunk-GN6QNOUL.js +91 -0
- package/dist/chunk-GN6QNOUL.js.map +1 -0
- package/dist/chunk-IFVYGNT3.js +107 -0
- package/dist/chunk-IFVYGNT3.js.map +1 -0
- package/dist/chunk-IUENDAAJ.js +67 -0
- package/dist/chunk-IUENDAAJ.js.map +1 -0
- package/dist/chunk-J2UXRMTU.cjs +126 -0
- package/dist/chunk-J2UXRMTU.cjs.map +1 -0
- package/dist/chunk-KOSC6EA3.js +101 -0
- package/dist/chunk-KOSC6EA3.js.map +1 -0
- package/dist/chunk-LDSV3U4M.js +69 -0
- package/dist/chunk-LDSV3U4M.js.map +1 -0
- package/dist/chunk-MZBQ4546.cjs +102 -0
- package/dist/chunk-MZBQ4546.cjs.map +1 -0
- package/dist/chunk-NBFOB2PI.cjs +91 -0
- package/dist/chunk-NBFOB2PI.cjs.map +1 -0
- package/dist/chunk-NBHEOJ5A.cjs +88 -0
- package/dist/chunk-NBHEOJ5A.cjs.map +1 -0
- package/dist/chunk-P6KUGPHD.cjs +91 -0
- package/dist/chunk-P6KUGPHD.cjs.map +1 -0
- package/dist/chunk-QTPXTDGY.js +119 -0
- package/dist/chunk-QTPXTDGY.js.map +1 -0
- package/dist/chunk-RPKDEFSJ.cjs +78 -0
- package/dist/chunk-RPKDEFSJ.cjs.map +1 -0
- package/dist/chunk-RVG3LEZQ.js +95 -0
- package/dist/chunk-RVG3LEZQ.js.map +1 -0
- package/dist/chunk-RVP3IU2L.cjs +67 -0
- package/dist/chunk-RVP3IU2L.cjs.map +1 -0
- package/dist/chunk-UO2PHBC3.js +126 -0
- package/dist/chunk-UO2PHBC3.js.map +1 -0
- package/dist/chunk-VAHQDIMW.js +88 -0
- package/dist/chunk-VAHQDIMW.js.map +1 -0
- package/dist/chunk-WPMKM6NL.js +78 -0
- package/dist/chunk-WPMKM6NL.js.map +1 -0
- package/dist/chunk-YHDO6XVM.js +19 -0
- package/dist/chunk-YHDO6XVM.js.map +1 -0
- package/dist/copper/index.cjs +12 -0
- package/dist/copper/index.cjs.map +1 -0
- package/dist/copper/index.d.cts +57 -0
- package/dist/copper/index.d.ts +57 -0
- package/dist/copper/index.js +12 -0
- package/dist/copper/index.js.map +1 -0
- package/dist/curve-stagger/index.cjs +17 -0
- package/dist/curve-stagger/index.cjs.map +1 -0
- package/dist/curve-stagger/index.d.cts +77 -0
- package/dist/curve-stagger/index.d.ts +77 -0
- package/dist/curve-stagger/index.js +17 -0
- package/dist/curve-stagger/index.js.map +1 -0
- package/dist/dropper/index.cjs +15 -0
- package/dist/dropper/index.cjs.map +1 -0
- package/dist/dropper/index.d.cts +84 -0
- package/dist/dropper/index.d.ts +84 -0
- package/dist/dropper/index.js +15 -0
- package/dist/dropper/index.js.map +1 -0
- package/dist/force/index.cjs +17 -0
- package/dist/force/index.cjs.map +1 -0
- package/dist/force/index.d.cts +69 -0
- package/dist/force/index.d.ts +69 -0
- package/dist/force/index.js +17 -0
- package/dist/force/index.js.map +1 -0
- package/dist/icing/index.cjs +9 -0
- package/dist/icing/index.cjs.map +1 -0
- package/dist/icing/index.d.cts +43 -0
- package/dist/icing/index.d.ts +43 -0
- package/dist/icing/index.js +9 -0
- package/dist/icing/index.js.map +1 -0
- package/dist/index.cjs +162 -1220
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +47 -775
- package/dist/index.d.ts +47 -775
- package/dist/index.js +108 -1063
- package/dist/index.js.map +1 -1
- package/dist/stroke/index.cjs +19 -0
- package/dist/stroke/index.cjs.map +1 -0
- package/dist/stroke/index.d.cts +63 -0
- package/dist/stroke/index.d.ts +63 -0
- package/dist/stroke/index.js +19 -0
- package/dist/stroke/index.js.map +1 -0
- package/dist/tension/index.cjs +19 -0
- package/dist/tension/index.cjs.map +1 -0
- package/dist/tension/index.d.cts +85 -0
- package/dist/tension/index.d.ts +85 -0
- package/dist/tension/index.js +19 -0
- package/dist/tension/index.js.map +1 -0
- package/dist/types-C2OanO8N.d.cts +33 -0
- package/dist/types-C2OanO8N.d.ts +33 -0
- package/dist/voltage-drop/index.cjs +12 -0
- package/dist/voltage-drop/index.cjs.map +1 -0
- package/dist/voltage-drop/index.d.cts +40 -0
- package/dist/voltage-drop/index.d.ts +40 -0
- package/dist/voltage-drop/index.js +12 -0
- package/dist/voltage-drop/index.js.map +1 -0
- package/dist/wavespeed/index.cjs +17 -0
- package/dist/wavespeed/index.cjs.map +1 -0
- package/dist/wavespeed/index.d.cts +58 -0
- package/dist/wavespeed/index.d.ts +58 -0
- package/dist/wavespeed/index.js +17 -0
- package/dist/wavespeed/index.js.map +1 -0
- package/dist/wear/index.cjs +13 -0
- package/dist/wear/index.cjs.map +1 -0
- package/dist/wear/index.d.cts +55 -0
- package/dist/wear/index.d.ts +55 -0
- package/dist/wear/index.js +13 -0
- package/dist/wear/index.js.map +1 -0
- package/dist/wind/index.cjs +15 -0
- package/dist/wind/index.cjs.map +1 -0
- package/dist/wind/index.d.cts +66 -0
- package/dist/wind/index.d.ts +66 -0
- package/dist/wind/index.js +15 -0
- package/dist/wind/index.js.map +1 -0
- package/package.json +64 -3
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// src/wear/meta.ts
|
|
2
|
+
var wearMeta = {
|
|
3
|
+
name: "\u63A5\u89E6\u7EBF\u78E8\u8017\u7387",
|
|
4
|
+
nameEn: "Contact Wire Wear Ratio",
|
|
5
|
+
summary: "\u6839\u636E\u539F\u622A\u9762\u79EF\u4E0E\u5B9E\u6D4B\u6B8B\u5B58\u622A\u9762\u8BA1\u7B97\u78E8\u8017\u7387 \u03B7\uFF0C\u03B7 > 20% \u65F6\u5EFA\u8BAE\u66F4\u6362\u63A5\u89E6\u7EBF\u3002",
|
|
6
|
+
formula: [
|
|
7
|
+
"\u78E8\u8017\u7387\uFF1A\u03B7 = (A\u2080 \u2212 A) / A\u2080 \xD7 100%",
|
|
8
|
+
"\u5224\u5B9A\u51C6\u5219\uFF1A\u03B7 > 20% \u5EFA\u8BAE\u66F4\u6362\u63A5\u89E6\u7EBF",
|
|
9
|
+
"\u6B8B\u5F84\u6362\u7B97\uFF08\u8FD1\u4F3C\uFF09\uFF1AA = \u03C0\xB7d\xB2 / 4"
|
|
10
|
+
],
|
|
11
|
+
references: [
|
|
12
|
+
"\u539F\u622A\u9762\u79EF\u6765\u6E90 TB/T 2809-2017\u300A\u7535\u6C14\u5316\u94C1\u8DEF\u7528\u94DC\u53CA\u94DC\u5408\u91D1\u63A5\u89E6\u7EBF\u300B",
|
|
13
|
+
"\u6807\u79F0\u622A\u9762 120/150 mm\xB2 \u4E3A\u540D\u4E49\u503C\uFF0C\u6807\u51C6\u53E6\u5217\u8BA1\u7B97\u622A\u9762 121/151 mm\xB2\uFF0C\u5B9E\u9645\u622A\u9762\u7531 TB/T 2809-2017 \u88682 \u5916\u5F62\u5C3A\u5BF8\u516C\u5DEE\u5E26\u63A7\u5236",
|
|
14
|
+
"\u78E8\u8017\u66F4\u6362\u9608\u503C\u8BF7\u4EE5\u6700\u65B0\u7248\u8FD0\u7EF4\u89C4\u7A0B\u4E3A\u51C6"
|
|
15
|
+
],
|
|
16
|
+
scope: [
|
|
17
|
+
"\u6B8B\u5F84\u6362\u7B97\u6309\u5706\u622A\u9762\u8FD1\u4F3C\uFF0C\u63A5\u89E6\u7EBF\u5B9E\u9645\u4E3A\u68AF\u5F62\u622A\u9762\uFF0C\u6362\u7B97\u503C\u5B58\u5728\u7CFB\u7EDF\u6027\u504F\u5DEE",
|
|
18
|
+
"\u672A\u8003\u8651\u78E8\u8017\u6CBF\u8DE8\u8DDD\u65B9\u5411\u7684\u4E0D\u5747\u5300\u5206\u5E03",
|
|
19
|
+
"\u5B9E\u9645\u4EA7\u54C1\u622A\u9762\u4EE5\u51FA\u5382\u68C0\u9A8C\u5355\u4E3A\u51C6"
|
|
20
|
+
],
|
|
21
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
22
|
+
online: "https://www.itswe.com/calculator/wear/"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// src/wear/index.ts
|
|
26
|
+
var DEFAULT_REPLACEMENT_THRESHOLD_PERCENT = 20;
|
|
27
|
+
function sectionFromDiameterMM2(diameterMM) {
|
|
28
|
+
if (!(diameterMM > 0)) {
|
|
29
|
+
throw new RangeError(`\u6B8B\u5F84\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${diameterMM} mm`);
|
|
30
|
+
}
|
|
31
|
+
return Math.PI * diameterMM * diameterMM / 4;
|
|
32
|
+
}
|
|
33
|
+
function wearRatio(input) {
|
|
34
|
+
const { originalSectionMM2: a0 } = input;
|
|
35
|
+
if (!(a0 > 0)) {
|
|
36
|
+
throw new RangeError(`\u539F\u622A\u9762\u79EF\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${a0} mm\xB2`);
|
|
37
|
+
}
|
|
38
|
+
const residualSectionMM2 = input.mode === "area" ? input.residualSectionMM2 : sectionFromDiameterMM2(input.residualDiameterMM);
|
|
39
|
+
if (!(residualSectionMM2 > 0)) {
|
|
40
|
+
throw new RangeError(`\u6B8B\u622A\u9762\u79EF\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${residualSectionMM2} mm\xB2`);
|
|
41
|
+
}
|
|
42
|
+
if (residualSectionMM2 > a0) {
|
|
43
|
+
throw new RangeError(
|
|
44
|
+
`\u6B8B\u622A\u9762\u79EF ${residualSectionMM2.toFixed(2)} mm\xB2 \u4E0D\u80FD\u5927\u4E8E\u539F\u622A\u9762\u79EF ${a0} mm\xB2`
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
const thresholdPercent = input.replacementThresholdPercent ?? DEFAULT_REPLACEMENT_THRESHOLD_PERCENT;
|
|
48
|
+
if (!(thresholdPercent > 0)) {
|
|
49
|
+
throw new RangeError(`\u66F4\u6362\u9608\u503C\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${thresholdPercent}%`);
|
|
50
|
+
}
|
|
51
|
+
const sectionLossMM2 = a0 - residualSectionMM2;
|
|
52
|
+
const wearPercent = sectionLossMM2 / a0 * 100;
|
|
53
|
+
return {
|
|
54
|
+
originalSectionMM2: a0,
|
|
55
|
+
residualSectionMM2,
|
|
56
|
+
sectionLossMM2,
|
|
57
|
+
wearPercent,
|
|
58
|
+
thresholdPercent,
|
|
59
|
+
verdict: wearPercent > thresholdPercent ? "replace" : "keep"
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export {
|
|
64
|
+
wearMeta,
|
|
65
|
+
DEFAULT_REPLACEMENT_THRESHOLD_PERCENT,
|
|
66
|
+
sectionFromDiameterMM2,
|
|
67
|
+
wearRatio
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=chunk-LDSV3U4M.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wear/meta.ts","../src/wear/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const wearMeta: CalculatorMeta = {\n name: '接触线磨耗率',\n nameEn: 'Contact Wire Wear Ratio',\n summary: '根据原截面积与实测残存截面计算磨耗率 η,η > 20% 时建议更换接触线。',\n formula: [\n '磨耗率:η = (A₀ − A) / A₀ × 100%',\n '判定准则:η > 20% 建议更换接触线',\n '残径换算(近似):A = π·d² / 4',\n ],\n references: [\n '原截面积来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》',\n '标称截面 120/150 mm² 为名义值,标准另列计算截面 121/151 mm²,实际截面由 TB/T 2809-2017 表2 外形尺寸公差带控制',\n '磨耗更换阈值请以最新版运维规程为准',\n ],\n scope: [\n '残径换算按圆截面近似,接触线实际为梯形截面,换算值存在系统性偏差',\n '未考虑磨耗沿跨距方向的不均匀分布',\n '实际产品截面以出厂检验单为准',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/wear/',\n};\n","export { wearMeta } from './meta';\n\n/** 更换阈值缺省值:η > 20% 建议更换接触线 */\nexport const DEFAULT_REPLACEMENT_THRESHOLD_PERCENT = 20;\n\n/** 磨耗计算公共输入 */\nexport interface WearBaseInput {\n /** 原截面积 A₀,mm² */\n readonly originalSectionMM2: number;\n /** 更换阈值 η,%。缺省 20 */\n readonly replacementThresholdPercent?: number;\n}\n\n/** 按实测残截面积计算 */\nexport interface WearByAreaInput extends WearBaseInput {\n readonly mode: 'area';\n /** 实测残截面积 A,mm²,不得大于 A₀ */\n readonly residualSectionMM2: number;\n}\n\n/** 按实测残径计算(圆截面近似 A = πd²/4) */\nexport interface WearByDiameterInput extends WearBaseInput {\n readonly mode: 'residual-diameter';\n /** 实测残径 d,mm */\n readonly residualDiameterMM: number;\n}\n\nexport type WearInput = WearByAreaInput | WearByDiameterInput;\n\n/** 判定结论:keep = 继续使用,replace = 建议更换 */\nexport type WearVerdict = 'keep' | 'replace';\n\n/** 磨耗率计算结果 */\nexport interface WearResult {\n /** 原截面积 A₀,mm² */\n readonly originalSectionMM2: number;\n /** 参与计算的残截面积 A,mm²(残径模式为换算值) */\n readonly residualSectionMM2: number;\n /** 截面损失 A₀ − A,mm² */\n readonly sectionLossMM2: number;\n /** 磨耗率 η,% */\n readonly wearPercent: number;\n /** 使用的更换阈值,% */\n readonly thresholdPercent: number;\n readonly verdict: WearVerdict;\n}\n\n/** 圆截面近似:由实测残径 d(mm)换算残截面积 A = π·d²/4(mm²) */\nexport function sectionFromDiameterMM2(diameterMM: number): number {\n if (!(diameterMM > 0)) {\n throw new RangeError(`残径必须为正数,收到 ${diameterMM} mm`);\n }\n return (Math.PI * diameterMM * diameterMM) / 4;\n}\n\n/**\n * 接触线磨耗率:η = (A₀ − A) / A₀ × 100%。\n *\n * 支持两种输入模式:直接给残截面积(`mode: 'area'`),或给实测残径\n * 按 A = π·d²/4 换算(`mode: 'residual-diameter'`)。\n *\n * 判定:η **严格大于**阈值(缺省 20%)判为 `replace`,等于阈值仍为 `keep`。\n */\nexport function wearRatio(input: WearInput): WearResult {\n const { originalSectionMM2: a0 } = input;\n if (!(a0 > 0)) {\n throw new RangeError(`原截面积必须为正数,收到 ${a0} mm²`);\n }\n\n const residualSectionMM2 =\n input.mode === 'area'\n ? input.residualSectionMM2\n : sectionFromDiameterMM2(input.residualDiameterMM);\n if (!(residualSectionMM2 > 0)) {\n throw new RangeError(`残截面积必须为正数,收到 ${residualSectionMM2} mm²`);\n }\n if (residualSectionMM2 > a0) {\n throw new RangeError(\n `残截面积 ${residualSectionMM2.toFixed(2)} mm² 不能大于原截面积 ${a0} mm²`,\n );\n }\n\n const thresholdPercent =\n input.replacementThresholdPercent ?? DEFAULT_REPLACEMENT_THRESHOLD_PERCENT;\n if (!(thresholdPercent > 0)) {\n throw new RangeError(`更换阈值必须为正数,收到 ${thresholdPercent}%`);\n }\n\n const sectionLossMM2 = a0 - residualSectionMM2;\n const wearPercent = (sectionLossMM2 / a0) * 100;\n\n return {\n originalSectionMM2: a0,\n residualSectionMM2,\n sectionLossMM2,\n wearPercent,\n thresholdPercent,\n verdict: wearPercent > thresholdPercent ? 'replace' : 'keep',\n };\n}\n"],"mappings":";AAEO,IAAM,WAA2B;AAAA,EACtC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACpBO,IAAM,wCAAwC;AA6C9C,SAAS,uBAAuB,YAA4B;AACjE,MAAI,EAAE,aAAa,IAAI;AACrB,UAAM,IAAI,WAAW,gEAAc,UAAU,KAAK;AAAA,EACpD;AACA,SAAQ,KAAK,KAAK,aAAa,aAAc;AAC/C;AAUO,SAAS,UAAU,OAA8B;AACtD,QAAM,EAAE,oBAAoB,GAAG,IAAI;AACnC,MAAI,EAAE,KAAK,IAAI;AACb,UAAM,IAAI,WAAW,4EAAgB,EAAE,SAAM;AAAA,EAC/C;AAEA,QAAM,qBACJ,MAAM,SAAS,SACX,MAAM,qBACN,uBAAuB,MAAM,kBAAkB;AACrD,MAAI,EAAE,qBAAqB,IAAI;AAC7B,UAAM,IAAI,WAAW,4EAAgB,kBAAkB,SAAM;AAAA,EAC/D;AACA,MAAI,qBAAqB,IAAI;AAC3B,UAAM,IAAI;AAAA,MACR,4BAAQ,mBAAmB,QAAQ,CAAC,CAAC,4DAAiB,EAAE;AAAA,IAC1D;AAAA,EACF;AAEA,QAAM,mBACJ,MAAM,+BAA+B;AACvC,MAAI,EAAE,mBAAmB,IAAI;AAC3B,UAAM,IAAI,WAAW,4EAAgB,gBAAgB,GAAG;AAAA,EAC1D;AAEA,QAAM,iBAAiB,KAAK;AAC5B,QAAM,cAAe,iBAAiB,KAAM;AAE5C,SAAO;AAAA,IACL,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,cAAc,mBAAmB,YAAY;AAAA,EACxD;AACF;","names":[]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkDGO2DCO5cjs = require('./chunk-DGO2DCO5.cjs');
|
|
4
|
+
|
|
5
|
+
// src/copper/meta.ts
|
|
6
|
+
var copperMeta = {
|
|
7
|
+
name: "\u63A5\u89E6\u7EBF\u53C2\u6570\u901F\u67E5",
|
|
8
|
+
nameEn: "Contact Wire Parameter Lookup",
|
|
9
|
+
summary: "\u5185\u7F6E CTHM / CTHA / CTHS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
|
|
10
|
+
formula: [
|
|
11
|
+
"\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1 = 0.00393 /\u2103\uFF09\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]",
|
|
12
|
+
"\u603B\u91CD\u91CF\uFF1AW = w\u2080 \xD7 l\uFF08w\u2080 \u5355\u4F4D\u91CD\u91CF kg/km\uFF0Cl \u957F\u5EA6 km\uFF09"
|
|
13
|
+
],
|
|
14
|
+
references: [
|
|
15
|
+
"\u5185\u7F6E\u53C2\u6570\u8868\u6765\u6E90 TB/T 2809-2017\u300A\u7535\u6C14\u5316\u94C1\u8DEF\u7528\u94DC\u53CA\u94DC\u5408\u91D1\u63A5\u89E6\u7EBF\u300B\uFF082018-05-01 \u5B9E\u65BD\uFF09",
|
|
16
|
+
"\u5355\u4F4D\u91CD\u91CF\u4E3A\u6807\u79F0\u503C",
|
|
17
|
+
"\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\uFF0C\u5BA4\u5185/\u5BA4\u5916\u53CC\u53E3\u5F84\u6309\u6807\u51C6\u88685",
|
|
18
|
+
"r\u2082\u2080 \u9664 CTHM-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
|
|
19
|
+
"\u6B63\u5F0F\u5DE5\u7A0B\u4EE5\u4EA7\u54C1\u6807\u51C6\u4E0E\u51FA\u5382\u68C0\u9A8C\u5355\u4E3A\u51C6"
|
|
20
|
+
],
|
|
21
|
+
scope: [
|
|
22
|
+
"\u6E29\u5EA6\u4FEE\u6B63\u4EC5\u8986\u76D6\u7535\u963B\uFF0C\u672A\u4FEE\u6B63\u5355\u4F4D\u91CD\u91CF\u4E0E\u8F7D\u6D41\u91CF",
|
|
23
|
+
"\u9002\u7528\u6E29\u5EA6 \u221240 ~ 90 \u2103",
|
|
24
|
+
"\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u5141\u8BB8\u6E29\u5EA6\u4E0B\u7684\u6301\u7EED\u503C\uFF0C\u672A\u505A\u73AF\u5883\u6E29\u5EA6\u4FEE\u6B63"
|
|
25
|
+
],
|
|
26
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
27
|
+
online: "https://www.itswe.com/calculator/copper/"
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// src/copper/index.ts
|
|
31
|
+
var TB2809_WIRE_PARAMS = {
|
|
32
|
+
"CTHM-120": {
|
|
33
|
+
unitWeightKgPerKm: 1082,
|
|
34
|
+
r20OhmPerKm: 0.2113,
|
|
35
|
+
ampacityIndoor150A: 430,
|
|
36
|
+
ampacityOutdoor150A: 560,
|
|
37
|
+
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0C\u03C1 \u6309\u6807\u51C6\u4E0A\u9650 0.02535 \u8BA1\u7B97"
|
|
38
|
+
},
|
|
39
|
+
"CTHM-150": {
|
|
40
|
+
unitWeightKgPerKm: 1350,
|
|
41
|
+
r20OhmPerKm: 0.169,
|
|
42
|
+
ampacityIndoor150A: 500,
|
|
43
|
+
ampacityOutdoor150A: 650,
|
|
44
|
+
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09"
|
|
45
|
+
},
|
|
46
|
+
"CTHA-120": {
|
|
47
|
+
unitWeightKgPerKm: 1070,
|
|
48
|
+
r20OhmPerKm: 0.1481,
|
|
49
|
+
ampacityIndoor150A: 515,
|
|
50
|
+
ampacityOutdoor150A: 680,
|
|
51
|
+
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777"
|
|
52
|
+
},
|
|
53
|
+
"CTHA-150": {
|
|
54
|
+
unitWeightKgPerKm: 1330,
|
|
55
|
+
r20OhmPerKm: 0.1185,
|
|
56
|
+
ampacityIndoor150A: 620,
|
|
57
|
+
ampacityOutdoor150A: 785,
|
|
58
|
+
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09"
|
|
59
|
+
},
|
|
60
|
+
"CTHS-120": {
|
|
61
|
+
unitWeightKgPerKm: 1080,
|
|
62
|
+
r20OhmPerKm: 0.1916,
|
|
63
|
+
ampacityIndoor150A: 515,
|
|
64
|
+
ampacityOutdoor150A: 680,
|
|
65
|
+
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
|
|
66
|
+
},
|
|
67
|
+
"CTHS-150": {
|
|
68
|
+
unitWeightKgPerKm: 1345,
|
|
69
|
+
r20OhmPerKm: 0.1533,
|
|
70
|
+
ampacityIndoor150A: 620,
|
|
71
|
+
ampacityOutdoor150A: 790,
|
|
72
|
+
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
function wireLookup(input) {
|
|
76
|
+
const { model, lengthKm, ambientTempDegC } = input;
|
|
77
|
+
const params = TB2809_WIRE_PARAMS[model];
|
|
78
|
+
if (params === void 0) {
|
|
79
|
+
throw new RangeError(`\u672A\u77E5\u578B\u53F7\uFF1A${model}`);
|
|
80
|
+
}
|
|
81
|
+
if (!(lengthKm > 0)) {
|
|
82
|
+
throw new RangeError(`\u957F\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${lengthKm} km`);
|
|
83
|
+
}
|
|
84
|
+
if (ambientTempDegC < -40 || ambientTempDegC > 90) {
|
|
85
|
+
throw new RangeError(`\u9002\u7528\u6E29\u5EA6\u4E3A \u221240 ~ 90 \u2103\uFF0C\u6536\u5230 ${ambientTempDegC} \u2103`);
|
|
86
|
+
}
|
|
87
|
+
const rT = _chunkDGO2DCO5cjs.resistanceAtTempOhmPerKm.call(void 0, params.r20OhmPerKm, ambientTempDegC);
|
|
88
|
+
return {
|
|
89
|
+
model,
|
|
90
|
+
...params,
|
|
91
|
+
totalWeightKg: params.unitWeightKgPerKm * lengthKm,
|
|
92
|
+
rTOhmPerKm: rT,
|
|
93
|
+
totalResistanceOhm: rT * lengthKm
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
exports.copperMeta = copperMeta; exports.TB2809_WIRE_PARAMS = TB2809_WIRE_PARAMS; exports.wireLookup = wireLookup;
|
|
102
|
+
//# sourceMappingURL=chunk-MZBQ4546.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-MZBQ4546.cjs","../src/copper/meta.ts","../src/copper/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACFO,IAAM,WAAA,EAA6B;AAAA,EACxC,IAAA,EAAM,4CAAA;AAAA,EACN,MAAA,EAAQ,+BAAA;AAAA,EACR,OAAA,EACE,sOAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,oIAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,8LAAA;AAAA,IACA,kDAAA;AAAA,IACA,iIAAA;AAAA,IACA,0QAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,gIAAA;AAAA,IACA,+CAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADGA;AACA;AEeO,IAAM,mBAAA,EAA8D;AAAA,EACzE,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR;AACF,CAAA;AAuBO,SAAS,UAAA,CAAW,KAAA,EAA8C;AACvE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,gBAAgB,EAAA,EAAI,KAAA;AAE7C,EAAA,MAAM,OAAA,EAAS,kBAAA,CAAmB,KAAK,CAAA;AACvC,EAAA,GAAA,CAAI,OAAA,IAAW,KAAA,CAAA,EAAW;AACxB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,8BAAA,EAAQ,KAAK,CAAA,CAAA;AACpC,EAAA;AACqB,EAAA;AACE,IAAA;AACvB,EAAA;AACmD,EAAA;AAC5B,IAAA;AACvB,EAAA;AAEwD,EAAA;AAEjD,EAAA;AACL,IAAA;AACG,IAAA;AACuC,IAAA;AAC9B,IAAA;AACa,IAAA;AAC3B,EAAA;AACF;AFtCgE;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-MZBQ4546.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const copperMeta: CalculatorMeta = {\n name: '接触线参数速查',\n nameEn: 'Contact Wire Parameter Lookup',\n summary:\n '内置 CTHM / CTHA / CTHS 系列 120/150 mm² 接触线参数表,按长度与环境温度给出总重量与温度修正电阻。',\n formula: [\n '电阻温度修正(α = 0.00393 /℃):r_T = r₂₀·[1 + α·(T − 20)]',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值,室内/室外双口径按标准表5',\n 'r₂₀ 除 CTHM-120 取给定值外,均按导电率反算估算(IACS 标准电阻率 0.017241 Ω·mm²/m ÷ 导电率 ÷ 截面积;0.017241 = 1/58)',\n '正式工程以产品标准与出厂检验单为准',\n ],\n scope: [\n '温度修正仅覆盖电阻,未修正单位重量与载流量',\n '适用温度 −40 ~ 90 ℃',\n '载流量为 150℃ 允许温度下的持续值,未做环境温度修正',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/copper/',\n};\n","export { copperMeta } from './meta';\n\n// 电阻温度修正与铜常数统一放在 src/common/resistance.ts(copper 与 voltage-drop 共用),\n// 由根 index 统一导出,此处仅内部引用,避免重复导出同名符号。\nimport { resistanceAtTempOhmPerKm } from '../common/resistance';\n\n/** 站点计算器内置的 6 个型号 */\nexport type CopperWireModel =\n | 'CTHM-120'\n | 'CTHM-150'\n | 'CTHA-120'\n | 'CTHA-150'\n | 'CTHS-120'\n | 'CTHS-150';\n\nexport interface WireParamEntry {\n /** 单位重量,kg/km(标称值) */\n readonly unitWeightKgPerKm: number;\n /** 20℃ 直流电阻,Ω/km */\n readonly r20OhmPerKm: number;\n /** 150℃ 持续载流量,室内口径,A */\n readonly ampacityIndoor150A: number;\n /** 150℃ 持续载流量,室外口径,A */\n readonly ampacityOutdoor150A: number;\n /** 口径说明:本行实际对应标准中的哪一行 */\n readonly note: string;\n}\n\n/**\n * 接触线参数表,来源 TB/T 2809-2017。\n *\n * 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。\n *\n * 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,\n * 6 个型号 × 4 项参数完全一致。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * ⚠️ 注意型号口径:CTHM / CTHA / CTHS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTHM-120': {\n unitWeightKgPerKm: 1082,\n r20OhmPerKm: 0.2113,\n ampacityIndoor150A: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),ρ 按标准上限 0.02535 计算',\n },\n 'CTHM-150': {\n unitWeightKgPerKm: 1350,\n r20OhmPerKm: 0.169,\n ampacityIndoor150A: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金)',\n },\n 'CTHA-120': {\n unitWeightKgPerKm: 1070,\n r20OhmPerKm: 0.1481,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777',\n },\n 'CTHA-150': {\n unitWeightKgPerKm: 1330,\n r20OhmPerKm: 0.1185,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金)',\n },\n 'CTHS-120': {\n unitWeightKgPerKm: 1080,\n r20OhmPerKm: 0.1916,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n 'CTHS-150': {\n unitWeightKgPerKm: 1345,\n r20OhmPerKm: 0.1533,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n};\n\nexport interface CopperLookupInput {\n readonly model: CopperWireModel;\n /** 长度 l,km */\n readonly lengthKm: number;\n /** 环境温度 T,℃ */\n readonly ambientTempDegC: number;\n}\n\nexport interface CopperLookupResult extends WireParamEntry {\n readonly model: CopperWireModel;\n /** 总重量 W = w₀ × l,kg */\n readonly totalWeightKg: number;\n /** 温度修正电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 全长温度修正电阻,Ω */\n readonly totalResistanceOhm: number;\n}\n\n/**\n * 按型号、长度与环境温度给出接触线参数速查结果。\n */\nexport function wireLookup(input: CopperLookupInput): CopperLookupResult {\n const { model, lengthKm, ambientTempDegC } = input;\n\n const params = TB2809_WIRE_PARAMS[model];\n if (params === undefined) {\n throw new RangeError(`未知型号:${model}`);\n }\n if (!(lengthKm > 0)) {\n throw new RangeError(`长度必须为正数,收到 ${lengthKm} km`);\n }\n if (ambientTempDegC < -40 || ambientTempDegC > 90) {\n throw new RangeError(`适用温度为 −40 ~ 90 ℃,收到 ${ambientTempDegC} ℃`);\n }\n\n const rT = resistanceAtTempOhmPerKm(params.r20OhmPerKm, ambientTempDegC);\n\n return {\n model,\n ...params,\n totalWeightKg: params.unitWeightKgPerKm * lengthKm,\n rTOhmPerKm: rT,\n totalResistanceOhm: rT * lengthKm,\n };\n}\n"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/ampacity/meta.ts
|
|
2
|
+
var ampacityMeta = {
|
|
3
|
+
name: "\u8F7D\u6D41\u91CF\u4FEE\u6B63\u4E0E\u77ED\u8DEF\u70ED\u7A33\u5B9A",
|
|
4
|
+
nameEn: "Ampacity Derating and Short-Circuit Thermal Stability",
|
|
5
|
+
summary: "\u6309\u73AF\u5883\u6E29\u5EA6\u4FEE\u6B63\u6301\u7EED\u8F7D\u6D41\u91CF\uFF0C\u5E76\u6309\u77ED\u8DEF\u70ED\u7A33\u5B9A\u6821\u6838\u6700\u5C0F\u622A\u9762\uFF0C\u7528\u4E8E\u63A5\u89E6\u7EBF/\u9644\u52A0\u5BFC\u7EBF\u622A\u9762\u9009\u578B\u4E0E\u6821\u6838\u3002",
|
|
6
|
+
formula: [
|
|
7
|
+
"\u8F7D\u6D41\u91CF\u73AF\u5883\u6E29\u5EA6\u4FEE\u6B63\uFF1AI(Ta) = I\u2080\xB7\u221A((Tmax \u2212 Ta) / (Tmax \u2212 T\u2080))",
|
|
8
|
+
"\u77ED\u8DEF\u70ED\u7A33\u5B9A\u6700\u5C0F\u622A\u9762\uFF1AS \u2265 I_k\xB7\u221At_k / C"
|
|
9
|
+
],
|
|
10
|
+
references: [
|
|
11
|
+
"\u5141\u8BB8\u5DE5\u4F5C\u6E29\u5EA6\uFF1A\u94DC 95\u2103\u3001\u94DC\u5408\u91D1 150\u2103\uFF08TB/T 2809-2017 \u88685\uFF09",
|
|
12
|
+
"\u57FA\u51C6\u8F7D\u6D41\u91CF I\u2080 \u53EF\u6309 TB/T 2809-2017 \u88685 \u53D6\u503C\uFF08\u5BA4\u5185\u4E3A\u65E0\u98CE\u65E0\u65E5\u7167\u8BD5\u9A8C\u6761\u4EF6\u4E0B\u987B\u7B26\u5408\u503C\uFF0C\u5BA4\u5916\u503C\u5B9C\u53C2\u7167\uFF09",
|
|
13
|
+
"\u70ED\u7A33\u5B9A\u7CFB\u6570 C \u5C5E\u8BBE\u8BA1\u8F93\u5165\uFF0C\u987B\u6309\u8BBE\u8BA1\u624B\u518C\u4E0E\u4EA7\u54C1\u6280\u672F\u6761\u4EF6\u53D6\u503C"
|
|
14
|
+
],
|
|
15
|
+
scope: [
|
|
16
|
+
"\u4FEE\u6B63\u5F0F\u4EC5\u8986\u76D6\u73AF\u5883\u6E29\u5EA6\u9879",
|
|
17
|
+
"\u9AD8\u6D77\u62D4\u3001\u96A7\u9053\u3001\u65E5\u7167\u53E0\u52A0\u573A\u666F\u987B\u53E6\u884C\u53E0\u52A0\u6563\u70ED\u4FEE\u6B63",
|
|
18
|
+
"\u77ED\u8DEF\u7535\u6D41 I_k \u5E94\u4E3A\u4F9B\u7535\u8BA1\u7B97\u7ED9\u51FA\u7684\u70ED\u7A33\u5B9A\u7B49\u6548\u503C",
|
|
19
|
+
"\u5207\u9664\u65F6\u95F4 t_k \u4E3A\u4FDD\u62A4\u52A8\u4F5C\u5168\u5207\u9664\u65F6\u95F4",
|
|
20
|
+
"\u672A\u8003\u8651\u90BB\u8FD1\u91D1\u5C5E\u56DE\u6D41\u3001\u96C6\u80A4\u6548\u5E94\u4E0E\u77ED\u65F6\u8FC7\u8F7D\u5DE5\u51B5"
|
|
21
|
+
],
|
|
22
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
23
|
+
online: "https://www.itswe.com/calculator/ampacity/"
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// src/ampacity/index.ts
|
|
27
|
+
var DEFAULT_BASE_AMBIENT_TEMP_DEG_C = 25;
|
|
28
|
+
function ampacityDeratingFactor(input) {
|
|
29
|
+
const {
|
|
30
|
+
maxAllowedTempDegC: tMax,
|
|
31
|
+
ambientTempDegC: tAmbient,
|
|
32
|
+
baseAmbientTempDegC: tBaseOpt
|
|
33
|
+
} = input;
|
|
34
|
+
const tBase = _nullishCoalesce(tBaseOpt, () => ( DEFAULT_BASE_AMBIENT_TEMP_DEG_C));
|
|
35
|
+
if (!(input.baseAmpacityA > 0)) {
|
|
36
|
+
throw new RangeError(`\u57FA\u51C6\u8F7D\u6D41\u91CF\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${input.baseAmpacityA} A`);
|
|
37
|
+
}
|
|
38
|
+
if (!(tMax > tBase)) {
|
|
39
|
+
throw new RangeError(
|
|
40
|
+
`\u5141\u8BB8\u6E29\u5EA6 ${tMax} \u2103 \u5FC5\u987B\u9AD8\u4E8E\u57FA\u51C6\u73AF\u5883\u6E29\u5EA6 ${tBase} \u2103`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
if (!(tAmbient < tMax)) {
|
|
44
|
+
throw new RangeError(
|
|
45
|
+
`\u5B9E\u9645\u73AF\u5883\u6E29\u5EA6 ${tAmbient} \u2103 \u5DF2\u8FBE\u5230\u6216\u8D85\u8FC7\u5141\u8BB8\u6E29\u5EA6 ${tMax} \u2103\uFF0C\u65E0\u6CD5\u6301\u7EED\u8FD0\u884C`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
if (!(tAmbient >= -273.15)) {
|
|
49
|
+
throw new RangeError(`\u73AF\u5883\u6E29\u5EA6\u4E0D\u80FD\u4F4E\u4E8E\u7EDD\u5BF9\u96F6\u5EA6\uFF0C\u6536\u5230 ${tAmbient} \u2103`);
|
|
50
|
+
}
|
|
51
|
+
return Math.sqrt((tMax - tAmbient) / (tMax - tBase));
|
|
52
|
+
}
|
|
53
|
+
function deratedAmpacityA(input) {
|
|
54
|
+
return input.baseAmpacityA * ampacityDeratingFactor(input);
|
|
55
|
+
}
|
|
56
|
+
function shortCircuitMinSectionMM2(shortCircuitCurrentKA, clearingTimeS, thermalCoefficientC) {
|
|
57
|
+
if (!(shortCircuitCurrentKA > 0)) {
|
|
58
|
+
throw new RangeError(
|
|
59
|
+
`\u77ED\u8DEF\u7535\u6D41\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${shortCircuitCurrentKA} kA`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
if (!(clearingTimeS > 0)) {
|
|
63
|
+
throw new RangeError(`\u5207\u9664\u65F6\u95F4\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${clearingTimeS} s`);
|
|
64
|
+
}
|
|
65
|
+
if (!(thermalCoefficientC > 0)) {
|
|
66
|
+
throw new RangeError(
|
|
67
|
+
`\u70ED\u7A33\u5B9A\u7CFB\u6570\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${thermalCoefficientC} A\xB7\u221As/mm\xB2`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
const iA = shortCircuitCurrentKA * 1e3;
|
|
71
|
+
return iA * Math.sqrt(clearingTimeS) / thermalCoefficientC;
|
|
72
|
+
}
|
|
73
|
+
function shortCircuitCheck(input) {
|
|
74
|
+
const minSectionMM2 = shortCircuitMinSectionMM2(
|
|
75
|
+
input.shortCircuitCurrentKA,
|
|
76
|
+
input.clearingTimeS,
|
|
77
|
+
input.thermalCoefficientC
|
|
78
|
+
);
|
|
79
|
+
const verdict = input.selectedSectionMM2 === null ? "not-assessed" : input.selectedSectionMM2 >= minSectionMM2 ? "pass" : "fail";
|
|
80
|
+
return { minSectionMM2, selectedSectionMM2: input.selectedSectionMM2, verdict };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
exports.ampacityMeta = ampacityMeta; exports.DEFAULT_BASE_AMBIENT_TEMP_DEG_C = DEFAULT_BASE_AMBIENT_TEMP_DEG_C; exports.ampacityDeratingFactor = ampacityDeratingFactor; exports.deratedAmpacityA = deratedAmpacityA; exports.shortCircuitMinSectionMM2 = shortCircuitMinSectionMM2; exports.shortCircuitCheck = shortCircuitCheck;
|
|
91
|
+
//# sourceMappingURL=chunk-NBFOB2PI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-NBFOB2PI.cjs","../src/ampacity/meta.ts","../src/ampacity/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-NBFOB2PI.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const ampacityMeta: CalculatorMeta = {\n name: '载流量修正与短路热稳定',\n nameEn: 'Ampacity Derating and Short-Circuit Thermal Stability',\n summary:\n '按环境温度修正持续载流量,并按短路热稳定校核最小截面,用于接触线/附加导线截面选型与校核。',\n formula: [\n '载流量环境温度修正:I(Ta) = I₀·√((Tmax − Ta) / (Tmax − T₀))',\n '短路热稳定最小截面:S ≥ I_k·√t_k / C',\n ],\n references: [\n '允许工作温度:铜 95℃、铜合金 150℃(TB/T 2809-2017 表5)',\n '基准载流量 I₀ 可按 TB/T 2809-2017 表5 取值(室内为无风无日照试验条件下须符合值,室外值宜参照)',\n '热稳定系数 C 属设计输入,须按设计手册与产品技术条件取值',\n ],\n scope: [\n '修正式仅覆盖环境温度项',\n '高海拔、隧道、日照叠加场景须另行叠加散热修正',\n '短路电流 I_k 应为供电计算给出的热稳定等效值',\n '切除时间 t_k 为保护动作全切除时间',\n '未考虑邻近金属回流、集肤效应与短时过载工况',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/ampacity/',\n};\n","export { ampacityMeta } from './meta';\n\n/** 基准环境温度 T₀,℃(TB/T 2809-2017 标准环境) */\nexport const DEFAULT_BASE_AMBIENT_TEMP_DEG_C = 25;\n\n/** 载流量环境温度修正输入 */\nexport interface AmpacityDeratingInput {\n /** 基准载流量 I₀,A(标准环境 T₀ 下的持续载流量) */\n readonly baseAmpacityA: number;\n /** 最高允许工作温度 Tmax,℃(铜 95、铜合金 150) */\n readonly maxAllowedTempDegC: number;\n /** 最不利实际环境温度 Ta,℃ */\n readonly ambientTempDegC: number;\n /** 基准环境温度 T₀,℃。缺省 25 ℃ */\n readonly baseAmbientTempDegC?: number;\n}\n\nexport interface AmpacityDeratingResult {\n /** 修正系数,无量纲 */\n readonly deratingFactor: number;\n /** 修正后载流量 I(Ta),A */\n readonly deratedAmpacityA: number;\n}\n\n/**\n * 环境温度修正系数:√((Tmax − Ta) / (Tmax − T₀))。\n *\n * Ta 越接近允许温度,系数越小;Ta = T₀ 时为 1;Ta > Tmax 无解,直接抛错。\n */\nexport function ampacityDeratingFactor(input: AmpacityDeratingInput): number {\n const {\n maxAllowedTempDegC: tMax,\n ambientTempDegC: tAmbient,\n baseAmbientTempDegC: tBaseOpt,\n } = input;\n const tBase = tBaseOpt ?? DEFAULT_BASE_AMBIENT_TEMP_DEG_C;\n\n if (!(input.baseAmpacityA > 0)) {\n throw new RangeError(`基准载流量必须为正数,收到 ${input.baseAmpacityA} A`);\n }\n if (!(tMax > tBase)) {\n throw new RangeError(\n `允许温度 ${tMax} ℃ 必须高于基准环境温度 ${tBase} ℃`,\n );\n }\n if (!(tAmbient < tMax)) {\n throw new RangeError(\n `实际环境温度 ${tAmbient} ℃ 已达到或超过允许温度 ${tMax} ℃,无法持续运行`,\n );\n }\n if (!(tAmbient >= -273.15)) {\n throw new RangeError(`环境温度不能低于绝对零度,收到 ${tAmbient} ℃`);\n }\n\n return Math.sqrt((tMax - tAmbient) / (tMax - tBase));\n}\n\n/**\n * 修正后载流量:I(Ta) = I₀·√((Tmax − Ta)/(Tmax − T₀)),A。\n *\n * ⚠️ 修正式仅覆盖环境温度项;高海拔、隧道、日照叠加场景须另行叠加修正。\n */\nexport function deratedAmpacityA(input: AmpacityDeratingInput): number {\n return input.baseAmpacityA * ampacityDeratingFactor(input);\n}\n\n/** 热稳定校核判定结果 */\nexport type ThermalStabilityVerdict = 'pass' | 'fail' | 'not-assessed';\n\nexport interface ShortCircuitCheckInput {\n /** 短路电流 I_k,kA(热稳定等效值,由供电计算给出) */\n readonly shortCircuitCurrentKA: number;\n /** 全切除时间 t_k,s */\n readonly clearingTimeS: number;\n /** 热稳定系数 C,A·√s/mm²(设计输入) */\n readonly thermalCoefficientC: number;\n /** 拟选截面,mm²。传 null 则仅输出最小截面,不判定 */\n readonly selectedSectionMM2: number | null;\n}\n\nexport interface ShortCircuitCheckResult {\n /** 最小热稳截面 S_min = I_k·√t_k / C,mm² */\n readonly minSectionMM2: number;\n readonly selectedSectionMM2: number | null;\n /** 拟选截面判定 */\n readonly verdict: ThermalStabilityVerdict;\n}\n\n/**\n * 短路热稳定最小截面:S_min = I_k·√t_k / C,mm²。\n *\n * @param shortCircuitCurrentKA 短路电流,kA\n * @param clearingTimeS 切除时间,s\n * @param thermalCoefficientC 热稳定系数,A·√s/mm²\n */\nexport function shortCircuitMinSectionMM2(\n shortCircuitCurrentKA: number,\n clearingTimeS: number,\n thermalCoefficientC: number,\n): number {\n if (!(shortCircuitCurrentKA > 0)) {\n throw new RangeError(\n `短路电流必须为正数,收到 ${shortCircuitCurrentKA} kA`,\n );\n }\n if (!(clearingTimeS > 0)) {\n throw new RangeError(`切除时间必须为正数,收到 ${clearingTimeS} s`);\n }\n if (!(thermalCoefficientC > 0)) {\n throw new RangeError(\n `热稳定系数必须为正数,收到 ${thermalCoefficientC} A·√s/mm²`,\n );\n }\n const iA = shortCircuitCurrentKA * 1000;\n return (iA * Math.sqrt(clearingTimeS)) / thermalCoefficientC;\n}\n\n/**\n * 短路热稳定校核:给出最小截面,并在提供拟选截面时判定是否满足 S ≥ S_min。\n */\nexport function shortCircuitCheck(input: ShortCircuitCheckInput): ShortCircuitCheckResult {\n const minSectionMM2 = shortCircuitMinSectionMM2(\n input.shortCircuitCurrentKA,\n input.clearingTimeS,\n input.thermalCoefficientC,\n );\n\n const verdict: ThermalStabilityVerdict =\n input.selectedSectionMM2 === null\n ? 'not-assessed'\n : input.selectedSectionMM2 >= minSectionMM2\n ? 'pass'\n : 'fail';\n\n return { minSectionMM2, selectedSectionMM2: input.selectedSectionMM2, verdict };\n}\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/wavespeed/meta.ts
|
|
2
|
+
var wavespeedMeta = {
|
|
3
|
+
name: "\u6CE2\u901F\u5229\u7528\u7387",
|
|
4
|
+
nameEn: "Wave Propagation Speed Utilisation",
|
|
5
|
+
summary: "\u7531\u63A5\u89E6\u7EBF\u5F20\u529B\u4E0E\u7EBF\u5BC6\u5EA6\u6C42\u6CE2\u4F20\u64AD\u901F\u5EA6 c \u4E0E\u6CE2\u901F\u5229\u7528\u7387 \u03B2 = v/c\uFF0C\u7ED9\u51FA\u8DE8\u8DDD\u524D\u4E09\u9636\u56FA\u6709\u9891\u7387\u4E0E\u4E00\u9636\u5171\u632F\u8F66\u901F\u3002",
|
|
6
|
+
formula: [
|
|
7
|
+
"\u6CE2\u4F20\u64AD\u901F\u5EA6\uFF1Ac = \u221A(T/\u03C1)\uFF08T \u53D6 N\uFF0C\u03C1 \u53D6 kg/m\uFF09",
|
|
8
|
+
"\u6CE2\u901F\u5229\u7528\u7387\uFF1A\u03B2 = v / c\uFF08v \u6362\u7B97\u4E3A m/s\uFF09",
|
|
9
|
+
"\u4E24\u7AEF\u56FA\u5B9A\u5F26\u56FA\u6709\u9891\u7387\uFF1Af_n = n/(2L)\xB7\u221A(T/\u03C1)",
|
|
10
|
+
"\u4E00\u9636\u5171\u632F\u8F66\u901F\uFF1Av_res = f\u2081\xB7L = c/2\uFF08\u8DE8\u8DDD\u901A\u8FC7\u9891\u7387 v/L \u4E0E f\u2081 \u76F8\u9047\uFF09"
|
|
11
|
+
],
|
|
12
|
+
references: [
|
|
13
|
+
"\u4F9D\u636E\u672C\u7AD9 \u5F13\u7F51\u5173\u7CFB / \u6CE2\u4F20\u64AD \u6761\u76EE",
|
|
14
|
+
"\u03B2 \u8FBE 0.7 \u65F6\u63D0\u793A\u63A5\u8FD1\u5171\u632F\u533A\uFF0C\u8BE5\u9608\u503C\u5C5E\u5DE5\u7A0B\u7ECF\u9A8C\u503C\uFF0C\u8BF7\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6"
|
|
15
|
+
],
|
|
16
|
+
scope: [
|
|
17
|
+
"\u5F20\u529B T\uFF1A5 ~ 40 kN",
|
|
18
|
+
"\u7EBF\u5BC6\u5EA6 \u03C1\uFF1A0.5 ~ 3 kg/m",
|
|
19
|
+
"\u901F\u5EA6 v\uFF1A20 ~ 500 km/h",
|
|
20
|
+
"\u8DE8\u8DDD l\uFF1A30 ~ 90 m",
|
|
21
|
+
"\u4E24\u7AEF\u56FA\u5B9A\u5F26\u6A21\u578B\uFF0C\u672A\u8003\u8651\u5F39\u6027\u652F\u627F\u4E0E\u963B\u5C3C",
|
|
22
|
+
"\u672A\u8003\u8651\u627F\u529B\u7D22\u4E0E\u540A\u5F26\u5BF9\u6CE2\u4F20\u64AD\u7684\u5F71\u54CD"
|
|
23
|
+
],
|
|
24
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
25
|
+
online: "https://www.itswe.com/calculator/wavespeed/"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/wavespeed/index.ts
|
|
29
|
+
var DEFAULT_WARN_THRESHOLD = 0.7;
|
|
30
|
+
function wavePropagationSpeedMPerS(tensionKN, linearMassKgPerM) {
|
|
31
|
+
if (!(tensionKN > 0)) {
|
|
32
|
+
throw new RangeError(`\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${tensionKN} kN`);
|
|
33
|
+
}
|
|
34
|
+
if (!(linearMassKgPerM > 0)) {
|
|
35
|
+
throw new RangeError(`\u7EBF\u5BC6\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${linearMassKgPerM} kg/m`);
|
|
36
|
+
}
|
|
37
|
+
return Math.sqrt(tensionKN * 1e3 / linearMassKgPerM);
|
|
38
|
+
}
|
|
39
|
+
function naturalFrequencyHz(n, spanM, waveSpeedMPerS) {
|
|
40
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
41
|
+
throw new RangeError(`\u9636\u6B21\u5FC5\u987B\u4E3A\u6B63\u6574\u6570\uFF0C\u6536\u5230 ${n}`);
|
|
42
|
+
}
|
|
43
|
+
if (!(spanM > 0)) {
|
|
44
|
+
throw new RangeError(`\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${spanM} m`);
|
|
45
|
+
}
|
|
46
|
+
if (!(waveSpeedMPerS > 0)) {
|
|
47
|
+
throw new RangeError(`\u6CE2\u901F\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${waveSpeedMPerS} m/s`);
|
|
48
|
+
}
|
|
49
|
+
return n / (2 * spanM) * waveSpeedMPerS;
|
|
50
|
+
}
|
|
51
|
+
function kmHToMPerS(speedKmH) {
|
|
52
|
+
return speedKmH / 3.6;
|
|
53
|
+
}
|
|
54
|
+
function waveSpeedCheck(input) {
|
|
55
|
+
const { tensionKN, linearMassKgPerM, speedKmH, spanM } = input;
|
|
56
|
+
if (!(speedKmH >= 0)) {
|
|
57
|
+
throw new RangeError(`\u901F\u5EA6\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${speedKmH} km/h`);
|
|
58
|
+
}
|
|
59
|
+
if (!(spanM > 0)) {
|
|
60
|
+
throw new RangeError(`\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${spanM} m`);
|
|
61
|
+
}
|
|
62
|
+
const c = wavePropagationSpeedMPerS(tensionKN, linearMassKgPerM);
|
|
63
|
+
const beta = kmHToMPerS(speedKmH) / c;
|
|
64
|
+
const fns = [1, 2, 3].map((n) => naturalFrequencyHz(n, spanM, c));
|
|
65
|
+
const f1 = fns[0];
|
|
66
|
+
if (f1 === void 0) {
|
|
67
|
+
throw new Error("\u56FA\u6709\u9891\u7387\u8BA1\u7B97\u5931\u8D25");
|
|
68
|
+
}
|
|
69
|
+
const threshold = _nullishCoalesce(input.warnThreshold, () => ( DEFAULT_WARN_THRESHOLD));
|
|
70
|
+
return {
|
|
71
|
+
waveSpeedMPerS: c,
|
|
72
|
+
beta,
|
|
73
|
+
betaPercent: beta * 100,
|
|
74
|
+
naturalFrequenciesHz: fns,
|
|
75
|
+
resonanceSpeedKmH: f1 * spanM * 3.6,
|
|
76
|
+
warn: beta >= threshold
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
exports.wavespeedMeta = wavespeedMeta; exports.DEFAULT_WARN_THRESHOLD = DEFAULT_WARN_THRESHOLD; exports.wavePropagationSpeedMPerS = wavePropagationSpeedMPerS; exports.naturalFrequencyHz = naturalFrequencyHz; exports.kmHToMPerS = kmHToMPerS; exports.waveSpeedCheck = waveSpeedCheck;
|
|
88
|
+
//# sourceMappingURL=chunk-NBHEOJ5A.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-NBHEOJ5A.cjs","../src/wavespeed/meta.ts","../src/wavespeed/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,cAAA,EAAgC;AAAA,EAC3C,IAAA,EAAM,gCAAA;AAAA,EACN,MAAA,EAAQ,oCAAA;AAAA,EACR,OAAA,EACE,8QAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,wGAAA;AAAA,IACA,wFAAA;AAAA,IACA,8FAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,qFAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,+BAAA;AAAA,IACA,6CAAA;AAAA,IACA,mCAAA;AAAA,IACA,+BAAA;AAAA,IACA,8GAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADDA;AACA;AExBO,IAAM,uBAAA,EAAyB,GAAA;AAoC/B,SAAS,yBAAA,CACd,SAAA,EACA,gBAAA,EACQ;AACR,EAAA,GAAA,CAAI,CAAA,CAAE,UAAA,EAAY,CAAA,CAAA,EAAI;AACpB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6DAAA,EAAc,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,EACnD;AACA,EAAA,GAAA,CAAI,CAAA,CAAE,iBAAA,EAAmB,CAAA,CAAA,EAAI;AAC3B,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,mEAAA,EAAe,gBAAgB,CAAA,KAAA,CAAO,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAM,UAAA,EAAY,IAAA,EAAO,gBAAgB,CAAA;AACvD;AASO,SAAS,kBAAA,CACd,CAAA,EACA,KAAA,EACA,cAAA,EACQ;AACR,EAAA,GAAA,CAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,EAAA,GAAK,EAAA,EAAI,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,mEAAA,EAAe,CAAC,CAAA,CAAA;AACvC,EAAA;AACkB,EAAA;AACwB,IAAA;AAC1C,EAAA;AAC2B,EAAA;AACU,IAAA;AACrC,EAAA;AAC2B,EAAA;AAC7B;AAGqD;AACjC,EAAA;AACpB;AAQuE;AACZ,EAAA;AAEnC,EAAA;AACsB,IAAA;AAC5C,EAAA;AACkB,EAAA;AACwB,IAAA;AAC1C,EAAA;AAE+D,EAAA;AAC3B,EAAA;AAC4B,EAAA;AAChD,EAAA;AACM,EAAA;AACM,IAAA;AAC5B,EAAA;AAEyC,EAAA;AAElC,EAAA;AACW,IAAA;AAChB,IAAA;AACoB,IAAA;AACE,IAAA;AACU,IAAA;AAClB,IAAA;AAChB,EAAA;AACF;AFrCiG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-NBHEOJ5A.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const wavespeedMeta: CalculatorMeta = {\n name: '波速利用率',\n nameEn: 'Wave Propagation Speed Utilisation',\n summary:\n '由接触线张力与线密度求波传播速度 c 与波速利用率 β = v/c,给出跨距前三阶固有频率与一阶共振车速。',\n formula: [\n '波传播速度:c = √(T/ρ)(T 取 N,ρ 取 kg/m)',\n '波速利用率:β = v / c(v 换算为 m/s)',\n '两端固定弦固有频率:f_n = n/(2L)·√(T/ρ)',\n '一阶共振车速:v_res = f₁·L = c/2(跨距通过频率 v/L 与 f₁ 相遇)',\n ],\n references: [\n '依据本站 弓网关系 / 波传播 条目',\n 'β 达 0.7 时提示接近共振区,该阈值属工程经验值,请以设计文件为准',\n ],\n scope: [\n '张力 T:5 ~ 40 kN',\n '线密度 ρ:0.5 ~ 3 kg/m',\n '速度 v:20 ~ 500 km/h',\n '跨距 l:30 ~ 90 m',\n '两端固定弦模型,未考虑弹性支承与阻尼',\n '未考虑承力索与吊弦对波传播的影响',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/wavespeed/',\n};\n","export { wavespeedMeta } from './meta';\n\n/** 波速利用率告警阈值(工程经验值) */\nexport const DEFAULT_WARN_THRESHOLD = 0.7;\n\nexport interface WaveSpeedInput {\n /** 接触线张力 T,kN */\n readonly tensionKN: number;\n /** 线密度 ρ,kg/m */\n readonly linearMassKgPerM: number;\n /** 列车速度 v,km/h */\n readonly speedKmH: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 告警阈值 β。缺省 0.7 */\n readonly warnThreshold?: number;\n}\n\nexport interface WaveSpeedResult {\n /** 波传播速度 c = √(T/ρ),m/s */\n readonly waveSpeedMPerS: number;\n /** 波速利用率 β = v/c,无量纲 */\n readonly beta: number;\n /** 波速利用率,% */\n readonly betaPercent: number;\n /** 前三阶固有频率 f₁ ~ f₃,Hz */\n readonly naturalFrequenciesHz: readonly number[];\n /** 一阶共振车速 v_res = f₁·l,km/h */\n readonly resonanceSpeedKmH: number;\n /** β 是否达到告警阈值 */\n readonly warn: boolean;\n}\n\n/**\n * 波传播速度:c = √(T/ρ),m/s。\n *\n * @param tensionKN 接触线张力 T,kN\n * @param linearMassKgPerM 线密度 ρ,kg/m\n */\nexport function wavePropagationSpeedMPerS(\n tensionKN: number,\n linearMassKgPerM: number,\n): number {\n if (!(tensionKN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionKN} kN`);\n }\n if (!(linearMassKgPerM > 0)) {\n throw new RangeError(`线密度必须为正数,收到 ${linearMassKgPerM} kg/m`);\n }\n return Math.sqrt((tensionKN * 1e3) / linearMassKgPerM);\n}\n\n/**\n * 两端固定弦第 n 阶固有频率:f_n = n/(2L)·√(T/ρ) = n·c/(2L),Hz。\n *\n * @param n 阶次,正整数\n * @param spanM 跨距 L,m\n * @param waveSpeedMPerS 波速 c,m/s\n */\nexport function naturalFrequencyHz(\n n: number,\n spanM: number,\n waveSpeedMPerS: number,\n): number {\n if (!Number.isInteger(n) || n < 1) {\n throw new RangeError(`阶次必须为正整数,收到 ${n}`);\n }\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(waveSpeedMPerS > 0)) {\n throw new RangeError(`波速必须为正数,收到 ${waveSpeedMPerS} m/s`);\n }\n return (n / (2 * spanM)) * waveSpeedMPerS;\n}\n\n/** km/h → m/s */\nexport function kmHToMPerS(speedKmH: number): number {\n return speedKmH / 3.6;\n}\n\n/**\n * 波速利用率校核。\n *\n * β = v/c;β 越接近 1 越接近共振区,达到阈值(默认 0.7)时告警。\n * 一阶共振车速 v_res 为跨距通过频率与一阶固有频率相遇时的车速。\n */\nexport function waveSpeedCheck(input: WaveSpeedInput): WaveSpeedResult {\n const { tensionKN, linearMassKgPerM, speedKmH, spanM } = input;\n\n if (!(speedKmH >= 0)) {\n throw new RangeError(`速度不能为负,收到 ${speedKmH} km/h`);\n }\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n\n const c = wavePropagationSpeedMPerS(tensionKN, linearMassKgPerM);\n const beta = kmHToMPerS(speedKmH) / c;\n const fns = [1, 2, 3].map((n) => naturalFrequencyHz(n, spanM, c));\n const f1 = fns[0];\n if (f1 === undefined) {\n throw new Error('固有频率计算失败');\n }\n\n const threshold = input.warnThreshold ?? DEFAULT_WARN_THRESHOLD;\n\n return {\n waveSpeedMPerS: c,\n beta,\n betaPercent: beta * 100,\n naturalFrequenciesHz: fns,\n resonanceSpeedKmH: f1 * spanM * 3.6,\n warn: beta >= threshold,\n };\n}\n"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/icing/meta.ts
|
|
2
|
+
var icingMeta = {
|
|
3
|
+
name: "\u8986\u51B0\u8377\u8F7D\u6821\u6838",
|
|
4
|
+
nameEn: "Ice Load Check",
|
|
5
|
+
summary: "\u6309\u51B0\u7B52\u6A21\u578B\u8BA1\u7B97\u8986\u51B0\u8377\u8F7D\uFF0C\u7ED9\u51FA\u8986\u51B0\u540E\u7684\u603B\u5782\u76F4\u8377\u8F7D\u3001\u5F1B\u5EA6\u53CA\u76F8\u5BF9\u65E0\u51B0\u5DE5\u51B5\u7684\u589E\u5E45\u3002",
|
|
6
|
+
formula: [
|
|
7
|
+
"\u51B0\u7B52\u6A21\u578B\u51B0\u91CD\uFF1Ag_ice = \u03C1_ice \xB7 g\u2080 \xB7 \u03C0 \xB7 b \xB7 (d + b)",
|
|
8
|
+
"\u8986\u51B0\u540E\u603B\u5782\u76F4\u8377\u8F7D\uFF1Ag_total = g_self + g_ice",
|
|
9
|
+
"\u65E0\u51B0\u5F1B\u5EA6\uFF1Af\u2080 = g_self\xB7l\xB2 / (8T)",
|
|
10
|
+
"\u8986\u51B0\u5F1B\u5EA6\uFF1Af_ice = g_total\xB7l\xB2 / (8T)",
|
|
11
|
+
"\u5F1B\u5EA6\u589E\u5E45\uFF1A(f_ice / f\u2080 \u2212 1) \xD7 100%"
|
|
12
|
+
],
|
|
13
|
+
references: [
|
|
14
|
+
"\u4F9D\u636E\u672C\u7AD9 \u8986\u51B0\u8377\u8F7D / \u8377\u8F7D\u8BA1\u7B97 \u6761\u76EE",
|
|
15
|
+
"\u51B0\u5BC6\u5EA6\u9ED8\u8BA4 900 kg/m\xB3\uFF0C\u8F7B\u8986\u51B0\u5730\u533A\u53EF\u53D6\u66F4\u5C0F\u503C\uFF0C\u4EE5\u5F53\u5730\u6C14\u8C61\u8D44\u6599\u4E3A\u51C6",
|
|
16
|
+
"\u5747\u5300\u51B0\u7B52\u5047\u8BBE\uFF0C\u672A\u8003\u8651\u4E0D\u89C4\u5219\u8986\u51B0\u5F62\u6001"
|
|
17
|
+
],
|
|
18
|
+
scope: [
|
|
19
|
+
"\u7EBF\u7D22\u76F4\u5F84 d\uFF1A1 ~ 40 mm",
|
|
20
|
+
"\u8986\u51B0\u539A\u5EA6 b\uFF1A0 ~ 50 mm\uFF080 \u8868\u793A\u65E0\u51B0\uFF09",
|
|
21
|
+
"\u5F20\u529B T\uFF1A1 ~ 40 kN",
|
|
22
|
+
"\u8DE8\u8DDD l\uFF1A10 ~ 90 m",
|
|
23
|
+
"\u7EBF\u7D22\u81EA\u91CD g_self\uFF1A1 ~ 60 N/m",
|
|
24
|
+
"\u51B0\u5BC6\u5EA6 \u03C1_ice\uFF1A500 ~ 950 kg/m\xB3",
|
|
25
|
+
"\u5747\u5300\u51B0\u7B52\u6A21\u578B\uFF0C\u672A\u8003\u8651\u4E0D\u5747\u5300\u8986\u51B0\u3001\u8131\u51B0\u8DF3\u8DC3\u4E0E\u98CE\u51B0\u7EC4\u5408",
|
|
26
|
+
"\u5F1B\u5EA6\u6309\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u672A\u8003\u8651\u8986\u51B0\u540E\u5F20\u529B\u53D8\u5316\uFF08\u672A\u4E0E\u72B6\u6001\u65B9\u7A0B\u8026\u5408\uFF09"
|
|
27
|
+
],
|
|
28
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
29
|
+
online: "https://www.itswe.com/calculator/icing/"
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/types.ts
|
|
33
|
+
var G0 = 9.81;
|
|
34
|
+
|
|
35
|
+
// src/common/ice.ts
|
|
36
|
+
var DEFAULT_ICE_DENSITY_KG_PER_M3 = 900;
|
|
37
|
+
function iceLoadNPerM(params) {
|
|
38
|
+
const { wireDiameterM, iceThicknessM } = params;
|
|
39
|
+
const rho = _nullishCoalesce(params.iceDensityKgPerM3, () => ( DEFAULT_ICE_DENSITY_KG_PER_M3));
|
|
40
|
+
if (!(wireDiameterM > 0)) {
|
|
41
|
+
throw new RangeError(`\u7EBF\u7D22\u76F4\u5F84\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${wireDiameterM} m`);
|
|
42
|
+
}
|
|
43
|
+
if (!(iceThicknessM >= 0)) {
|
|
44
|
+
throw new RangeError(`\u8986\u51B0\u539A\u5EA6\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${iceThicknessM} m`);
|
|
45
|
+
}
|
|
46
|
+
if (!(rho > 0)) {
|
|
47
|
+
throw new RangeError(`\u51B0\u5BC6\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${rho} kg/m\xB3`);
|
|
48
|
+
}
|
|
49
|
+
if (iceThicknessM === 0) return 0;
|
|
50
|
+
return rho * G0 * Math.PI * iceThicknessM * (wireDiameterM + iceThicknessM);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// src/icing/index.ts
|
|
54
|
+
function icingCheck(input) {
|
|
55
|
+
const { wireDiameterM, iceThicknessM, tensionN, spanM, selfWeightNPerM } = input;
|
|
56
|
+
if (!(tensionN > 0)) {
|
|
57
|
+
throw new RangeError(`\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${tensionN} N`);
|
|
58
|
+
}
|
|
59
|
+
if (!(spanM > 0)) {
|
|
60
|
+
throw new RangeError(`\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${spanM} m`);
|
|
61
|
+
}
|
|
62
|
+
if (!(selfWeightNPerM > 0)) {
|
|
63
|
+
throw new RangeError(`\u7EBF\u7D22\u81EA\u91CD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${selfWeightNPerM} N/m`);
|
|
64
|
+
}
|
|
65
|
+
const iceParams = {
|
|
66
|
+
wireDiameterM,
|
|
67
|
+
iceThicknessM,
|
|
68
|
+
...input.iceDensityKgPerM3 === void 0 ? {} : { iceDensityKgPerM3: input.iceDensityKgPerM3 }
|
|
69
|
+
};
|
|
70
|
+
const gIce = iceLoadNPerM(iceParams);
|
|
71
|
+
const gTotal = selfWeightNPerM + gIce;
|
|
72
|
+
const fNoIce = selfWeightNPerM * spanM * spanM / (8 * tensionN);
|
|
73
|
+
const fIce = gTotal * spanM * spanM / (8 * tensionN);
|
|
74
|
+
return {
|
|
75
|
+
iceLoadNPerM: gIce,
|
|
76
|
+
totalLoadNPerM: gTotal,
|
|
77
|
+
sagNoIceM: fNoIce,
|
|
78
|
+
sagWithIceM: fIce,
|
|
79
|
+
growthPercent: (fIce / fNoIce - 1) * 100,
|
|
80
|
+
heavy: gIce > selfWeightNPerM
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
exports.G0 = G0; exports.DEFAULT_ICE_DENSITY_KG_PER_M3 = DEFAULT_ICE_DENSITY_KG_PER_M3; exports.iceLoadNPerM = iceLoadNPerM; exports.icingMeta = icingMeta; exports.icingCheck = icingCheck;
|
|
91
|
+
//# sourceMappingURL=chunk-P6KUGPHD.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-P6KUGPHD.cjs","../src/icing/meta.ts","../src/types.ts","../src/common/ice.ts","../src/icing/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-P6KUGPHD.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const icingMeta: CalculatorMeta = {\n name: '覆冰荷载校核',\n nameEn: 'Ice Load Check',\n summary:\n '按冰筒模型计算覆冰荷载,给出覆冰后的总垂直荷载、弛度及相对无冰工况的增幅。',\n formula: [\n '冰筒模型冰重:g_ice = ρ_ice · g₀ · π · b · (d + b)',\n '覆冰后总垂直荷载:g_total = g_self + g_ice',\n '无冰弛度:f₀ = g_self·l² / (8T)',\n '覆冰弛度:f_ice = g_total·l² / (8T)',\n '弛度增幅:(f_ice / f₀ − 1) × 100%',\n ],\n references: [\n '依据本站 覆冰荷载 / 荷载计算 条目',\n '冰密度默认 900 kg/m³,轻覆冰地区可取更小值,以当地气象资料为准',\n '均匀冰筒假设,未考虑不规则覆冰形态',\n ],\n scope: [\n '线索直径 d:1 ~ 40 mm',\n '覆冰厚度 b:0 ~ 50 mm(0 表示无冰)',\n '张力 T:1 ~ 40 kN',\n '跨距 l:10 ~ 90 m',\n '线索自重 g_self:1 ~ 60 N/m',\n '冰密度 ρ_ice:500 ~ 950 kg/m³',\n '均匀冰筒模型,未考虑不均匀覆冰、脱冰跳跃与风冰组合',\n '弛度按抛物线近似,未考虑覆冰后张力变化(未与状态方程耦合)',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/icing/',\n};\n","/**\n * 全库公共类型定义。\n *\n * 命名约定(重要):\n * 所有数值字段的单位都写在变量名末尾,例如 tensionKN / spanM / crossSectionMM2。\n * 工程计算里单位混淆是头号 bug 来源,宁可名字长,也不要靠注释记单位。\n */\n\n/**\n * 每个计算器模块必须导出的元信息。\n * 这是本库区别于\"玩具代码\"的核心 —— 公式、依据、适用范围、免责声明全部可机读。\n */\nexport interface CalculatorMeta {\n /** 计算器中文名 */\n readonly name: string;\n /** 计算器英文名,用于国际检索 */\n readonly nameEn: string;\n /** 一句话用途说明 */\n readonly summary: string;\n /** 核心公式,LaTeX 或纯文本,可多条 */\n readonly formula: readonly string[];\n /** 参考依据:标准号、设计手册、教材。注意标注该标准是否真正包含此公式 */\n readonly references: readonly string[];\n /** 适用范围与已知限制 */\n readonly scope: readonly string[];\n /** 免责声明 */\n readonly disclaimer: string;\n /** 在线版本地址 */\n readonly online: string;\n}\n\n/** 重力加速度,N/kg(m/s²) */\nexport const G0 = 9.81;\n","/**\n * 覆冰冰筒模型 —— tension 与 icing 共用。\n *\n * 统一使用 SI 单位(米),与站点 calc-core.js 的 icingCheck 内部口径一致。\n * 页面侧若以 mm 采集,调用前需自行 /1000。\n */\n\nimport { G0 } from '../types';\n\n/** 冰密度常用值,kg/m³ */\nexport const DEFAULT_ICE_DENSITY_KG_PER_M3 = 900;\n\nexport interface IceLoadParams {\n /** 线索直径 d,m */\n readonly wireDiameterM: number;\n /** 覆冰厚度 b,m。传 0 表示无冰 */\n readonly iceThicknessM: number;\n /** 冰密度 ρ_ice,kg/m³。缺省 900 */\n readonly iceDensityKgPerM3?: number;\n}\n\n/**\n * 冰筒模型单位长度冰重:g_ice = ρ_ice·g₀·π·b·(d + b),N/m。\n *\n * 传 iceThicknessM = 0 时返回 0。\n */\nexport function iceLoadNPerM(params: IceLoadParams): number {\n const { wireDiameterM, iceThicknessM } = params;\n const rho = params.iceDensityKgPerM3 ?? DEFAULT_ICE_DENSITY_KG_PER_M3;\n\n if (!(wireDiameterM > 0)) {\n throw new RangeError(`线索直径必须为正数,收到 ${wireDiameterM} m`);\n }\n if (!(iceThicknessM >= 0)) {\n throw new RangeError(`覆冰厚度不能为负,收到 ${iceThicknessM} m`);\n }\n if (!(rho > 0)) {\n throw new RangeError(`冰密度必须为正数,收到 ${rho} kg/m³`);\n }\n if (iceThicknessM === 0) return 0;\n\n return rho * G0 * Math.PI * iceThicknessM * (wireDiameterM + iceThicknessM);\n}\n","export { icingMeta } from './meta';\n\n// 冰筒模型与 tension 模块共用 src/common/ice.ts,由根 index 统一导出\nimport { iceLoadNPerM, type IceLoadParams } from '../common/ice';\n\nexport interface IcingCheckInput {\n /** 线索直径 d,m */\n readonly wireDiameterM: number;\n /** 覆冰厚度 b,m。传 0 表示无冰 */\n readonly iceThicknessM: number;\n /** 线索张力 T,N */\n readonly tensionN: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 线索自重 g_self,N/m */\n readonly selfWeightNPerM: number;\n /** 冰密度 ρ_ice,kg/m³。缺省 900 */\n readonly iceDensityKgPerM3?: number;\n}\n\nexport interface IcingCheckResult {\n /** 单位长度冰重 g_ice,N/m */\n readonly iceLoadNPerM: number;\n /** 覆冰后总垂直荷载 g_total,N/m */\n readonly totalLoadNPerM: number;\n /** 无冰弛度 f₀,m */\n readonly sagNoIceM: number;\n /** 覆冰弛度 f_ice,m */\n readonly sagWithIceM: number;\n /** 弛度增幅,% */\n readonly growthPercent: number;\n /** 冰重是否超过线索自重(重覆冰判据) */\n readonly heavy: boolean;\n}\n\n/**\n * 覆冰综合校核。\n *\n * 给出覆冰后的总垂直荷载、弛度及增幅;冰重超过线索自重时 `heavy` 为真。\n *\n * ⚠️ 弛度按抛物线近似,且**未与张力-温度状态方程耦合** —— 覆冰引起的\n * 张力变化未计入,大覆冰工况偏于乐观。\n */\nexport function icingCheck(input: IcingCheckInput): IcingCheckResult {\n const { wireDiameterM, iceThicknessM, tensionN, spanM, selfWeightNPerM } = input;\n\n if (!(tensionN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionN} N`);\n }\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(selfWeightNPerM > 0)) {\n throw new RangeError(`线索自重必须为正数,收到 ${selfWeightNPerM} N/m`);\n }\n\n const iceParams: IceLoadParams = {\n wireDiameterM,\n iceThicknessM,\n ...(input.iceDensityKgPerM3 === undefined\n ? {}\n : { iceDensityKgPerM3: input.iceDensityKgPerM3 }),\n };\n const gIce = iceLoadNPerM(iceParams);\n const gTotal = selfWeightNPerM + gIce;\n\n const fNoIce = (selfWeightNPerM * spanM * spanM) / (8 * tensionN);\n const fIce = (gTotal * spanM * spanM) / (8 * tensionN);\n\n return {\n iceLoadNPerM: gIce,\n totalLoadNPerM: gTotal,\n sagNoIceM: fNoIce,\n sagWithIceM: fIce,\n growthPercent: (fIce / fNoIce - 1) * 100,\n heavy: gIce > selfWeightNPerM,\n };\n}\n"]}
|