formulab 0.37.0 → 0.38.0
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 +78 -0
- package/dist/automotive/evCharging.d.ts.map +1 -1
- package/dist/automotive/evCharging.js +3 -0
- package/dist/automotive/evCharging.js.map +1 -1
- package/dist/automotive/gearRatio.d.ts.map +1 -1
- package/dist/automotive/gearRatio.js +5 -0
- package/dist/automotive/gearRatio.js.map +1 -1
- package/dist/battery/batteryPackConfig.d.ts.map +1 -1
- package/dist/battery/batteryPackConfig.js +12 -0
- package/dist/battery/batteryPackConfig.js.map +1 -1
- package/dist/battery/bmsBalancing.d.ts.map +1 -1
- package/dist/battery/bmsBalancing.js +14 -0
- package/dist/battery/bmsBalancing.js.map +1 -1
- package/dist/battery/chargingProfile.d.ts.map +1 -1
- package/dist/battery/chargingProfile.js +14 -0
- package/dist/battery/chargingProfile.js.map +1 -1
- package/dist/battery/internalResistance.d.ts.map +1 -1
- package/dist/battery/internalResistance.js +3 -0
- package/dist/battery/internalResistance.js.map +1 -1
- package/dist/battery/selfDischarge.d.ts.map +1 -1
- package/dist/battery/selfDischarge.js +6 -0
- package/dist/battery/selfDischarge.js.map +1 -1
- package/dist/battery/stateOfHealth.d.ts.map +1 -1
- package/dist/battery/stateOfHealth.js +6 -0
- package/dist/battery/stateOfHealth.js.map +1 -1
- package/dist/battery/thermalRunaway.d.ts.map +1 -1
- package/dist/battery/thermalRunaway.js +8 -0
- package/dist/battery/thermalRunaway.js.map +1 -1
- package/dist/chemical/concentration.d.ts.map +1 -1
- package/dist/chemical/concentration.js +8 -0
- package/dist/chemical/concentration.js.map +1 -1
- package/dist/chemical/flowControl.d.ts.map +1 -1
- package/dist/chemical/flowControl.js +8 -0
- package/dist/chemical/flowControl.js.map +1 -1
- package/dist/chemical/reactor.d.ts.map +1 -1
- package/dist/chemical/reactor.js +4 -0
- package/dist/chemical/reactor.js.map +1 -1
- package/dist/chemical/reliefValve.d.ts.map +1 -1
- package/dist/chemical/reliefValve.js +8 -0
- package/dist/chemical/reliefValve.js.map +1 -1
- package/dist/construction/formwork.d.ts.map +1 -1
- package/dist/construction/formwork.js +22 -16
- package/dist/construction/formwork.js.map +1 -1
- package/dist/energy/pfCorrection.d.ts.map +1 -1
- package/dist/energy/pfCorrection.js +8 -0
- package/dist/energy/pfCorrection.js.map +1 -1
- package/dist/energy/vfdSavings.d.ts.map +1 -1
- package/dist/energy/vfdSavings.js +15 -0
- package/dist/energy/vfdSavings.js.map +1 -1
- package/dist/energy/windOutput.d.ts.map +1 -1
- package/dist/energy/windOutput.js +8 -0
- package/dist/energy/windOutput.js.map +1 -1
- package/dist/environmental/esgSummary.d.ts.map +1 -1
- package/dist/environmental/esgSummary.js +5 -0
- package/dist/environmental/esgSummary.js.map +1 -1
- package/dist/logistics/safetyStock.d.ts.map +1 -1
- package/dist/logistics/safetyStock.js +5 -0
- package/dist/logistics/safetyStock.js.map +1 -1
- package/dist/machining/boltCircle.d.ts.map +1 -1
- package/dist/machining/boltCircle.js +6 -0
- package/dist/machining/boltCircle.js.map +1 -1
- package/dist/machining/cuspHeight.d.ts +3 -0
- package/dist/machining/cuspHeight.d.ts.map +1 -1
- package/dist/machining/cuspHeight.js +12 -0
- package/dist/machining/cuspHeight.js.map +1 -1
- package/dist/machining/radialChipThinning.d.ts.map +1 -1
- package/dist/machining/radialChipThinning.js +9 -0
- package/dist/machining/radialChipThinning.js.map +1 -1
- package/dist/machining/triangleSolver.d.ts.map +1 -1
- package/dist/machining/triangleSolver.js +12 -0
- package/dist/machining/triangleSolver.js.map +1 -1
- package/dist/metal/kFactorReverse.d.ts.map +1 -1
- package/dist/metal/kFactorReverse.js +8 -0
- package/dist/metal/kFactorReverse.js.map +1 -1
- package/dist/quality/mtbf.d.ts +20 -0
- package/dist/quality/mtbf.d.ts.map +1 -1
- package/dist/quality/mtbf.js +38 -9
- package/dist/quality/mtbf.js.map +1 -1
- package/dist/safety/illuminance.d.ts.map +1 -1
- package/dist/safety/illuminance.js +8 -0
- package/dist/safety/illuminance.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,14 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export function pfCorrection(input) {
|
|
14
14
|
const { kW, currentPf, targetPf, electricityRate, monthlyUsageHours, pfPenaltyRate, pfPenaltyThreshold, capacitorCostPerKvar, } = input;
|
|
15
|
+
// Apparent power divides real power by the power factor; a factor at or below zero has
|
|
16
|
+
// no apparent power to report, and one above 1 is not a power factor.
|
|
17
|
+
if (!(currentPf > 0) || currentPf > 1) {
|
|
18
|
+
throw new RangeError('currentPf must be greater than 0 and at most 1');
|
|
19
|
+
}
|
|
20
|
+
if (!(targetPf > 0) || targetPf > 1) {
|
|
21
|
+
throw new RangeError('targetPf must be greater than 0 and at most 1');
|
|
22
|
+
}
|
|
15
23
|
// Calculate current and target apparent power (kVA)
|
|
16
24
|
const currentKva = kW / currentPf;
|
|
17
25
|
const targetKva = kW / targetPf;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pfCorrection.js","sourceRoot":"","sources":["../../src/energy/pfCorrection.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EACJ,EAAE,EACF,SAAS,EACT,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,GAAG,KAAK,CAAC;IAEV,oDAAoD;IACpD,MAAM,UAAU,GAAG,EAAE,GAAG,SAAS,CAAC;IAClC,MAAM,SAAS,GAAG,EAAE,GAAG,QAAQ,CAAC;IAEhC,6CAA6C;IAC7C,iEAAiE;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,2BAA2B;IAC3B,MAAM,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAC;IAE1D,6CAA6C;IAC7C,MAAM,UAAU,GAAG,EAAE,GAAG,iBAAiB,CAAC;IAE1C,uBAAuB;IACvB,0DAA0D;IAC1D,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAU,EAAE;QAC9C,IAAI,EAAE,IAAI,kBAAkB;YAAE,OAAO,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QACjE,OAAO,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,eAAe,CAAC;IACrE,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAErD,yCAAyC;IACzC,MAAM,cAAc,GAAG,qBAAqB,GAAG,iBAAiB,CAAC;IAEjE,iBAAiB;IACjB,MAAM,aAAa,GAAG,cAAc,GAAG,EAAE,CAAC;IAE1C,oDAAoD;IACpD,MAAM,aAAa,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,OAAO;QACL,UAAU;QACV,SAAS;QACT,YAAY;QACZ,aAAa;QACb,qBAAqB;QACrB,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"pfCorrection.js","sourceRoot":"","sources":["../../src/energy/pfCorrection.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EACJ,EAAE,EACF,SAAS,EACT,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,GAAG,KAAK,CAAC;IAEV,uFAAuF;IACvF,sEAAsE;IACtE,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,UAAU,CAAC,+CAA+C,CAAC,CAAC;IACxE,CAAC;IAED,oDAAoD;IACpD,MAAM,UAAU,GAAG,EAAE,GAAG,SAAS,CAAC;IAClC,MAAM,SAAS,GAAG,EAAE,GAAG,QAAQ,CAAC;IAEhC,6CAA6C;IAC7C,iEAAiE;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,2BAA2B;IAC3B,MAAM,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAC;IAE1D,6CAA6C;IAC7C,MAAM,UAAU,GAAG,EAAE,GAAG,iBAAiB,CAAC;IAE1C,uBAAuB;IACvB,0DAA0D;IAC1D,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAU,EAAE;QAC9C,IAAI,EAAE,IAAI,kBAAkB;YAAE,OAAO,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QACjE,OAAO,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,eAAe,CAAC;IACrE,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAErD,yCAAyC;IACzC,MAAM,cAAc,GAAG,qBAAqB,GAAG,iBAAiB,CAAC;IAEjE,iBAAiB;IACjB,MAAM,aAAa,GAAG,cAAc,GAAG,EAAE,CAAC;IAE1C,oDAAoD;IACpD,MAAM,aAAa,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,OAAO;QACL,UAAU;QACV,SAAS;QACT,YAAY;QACZ,aAAa;QACb,qBAAqB;QACrB,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfdSavings.d.ts","sourceRoot":"","sources":["../../src/energy/vfdSavings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKpE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"vfdSavings.d.ts","sourceRoot":"","sources":["../../src/energy/vfdSavings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKpE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA4EnE"}
|
|
@@ -15,6 +15,21 @@ const CO2_FACTOR = 0.5;
|
|
|
15
15
|
*/
|
|
16
16
|
export function vfdSavings(input) {
|
|
17
17
|
const { motorKw, fullSpeedRpm, newSpeedRpm, runningHoursPerYear, electricityRate, loadFactor, vfdCost, vfdEfficiency, } = input;
|
|
18
|
+
// The affinity law works on the speed ratio, and the saving is expressed as a share of
|
|
19
|
+
// the motor's rated load; none of these three may be zero.
|
|
20
|
+
if (!(motorKw > 0)) {
|
|
21
|
+
throw new RangeError('motorKw must be greater than 0');
|
|
22
|
+
}
|
|
23
|
+
if (!(fullSpeedRpm > 0)) {
|
|
24
|
+
throw new RangeError('fullSpeedRpm must be greater than 0');
|
|
25
|
+
}
|
|
26
|
+
if (!(loadFactor > 0)) {
|
|
27
|
+
throw new RangeError('loadFactor must be greater than 0');
|
|
28
|
+
}
|
|
29
|
+
// The drive's own losses divide the shaft power by its efficiency.
|
|
30
|
+
if (!(vfdEfficiency > 0)) {
|
|
31
|
+
throw new RangeError('vfdEfficiency must be greater than 0');
|
|
32
|
+
}
|
|
18
33
|
// Calculate speed ratio
|
|
19
34
|
const speedRatio = newSpeedRpm / fullSpeedRpm;
|
|
20
35
|
// Apply affinity law: Power is proportional to Speed cubed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfdSavings.js","sourceRoot":"","sources":["../../src/energy/vfdSavings.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,OAAO,EACP,aAAa,GACd,GAAG,KAAK,CAAC;IAEV,wBAAwB;IACxB,MAAM,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;IAE9C,2DAA2D;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAE3C,oEAAoE;IACpE,MAAM,eAAe,GAAG,OAAO,GAAG,UAAU,CAAC;IAE7C,2CAA2C;IAC3C,kCAAkC;IAClC,MAAM,UAAU,GAAG,eAAe,GAAG,UAAU,GAAG,aAAa,CAAC;IAEhE,kBAAkB;IAClB,MAAM,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC;IACpD,MAAM,qBAAqB,GAAG,CAAC,cAAc,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IAEvE,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,eAAe,GAAG,mBAAmB,CAAC;IAChE,MAAM,YAAY,GAAG,UAAU,GAAG,mBAAmB,CAAC;IAEtD,yBAAyB;IACzB,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAC/D,MAAM,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC;IAErD,iBAAiB;IACjB,MAAM,aAAa,GAAG,kBAAkB,GAAG,aAAa,CAAC;IAEzD,iDAAiD;IACjD,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,gBAAgB;IAChB,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAC1D,MAAM,cAAc,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAErD,OAAO;QACL,UAAU;QACV,UAAU;QACV,eAAe;QACf,UAAU;QACV,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"vfdSavings.js","sourceRoot":"","sources":["../../src/energy/vfdSavings.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,OAAO,EACP,aAAa,GACd,GAAG,KAAK,CAAC;IAEV,uFAAuF;IACvF,2DAA2D;IAC3D,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;IACD,mEAAmE;IACnE,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;IAE9C,2DAA2D;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAE3C,oEAAoE;IACpE,MAAM,eAAe,GAAG,OAAO,GAAG,UAAU,CAAC;IAE7C,2CAA2C;IAC3C,kCAAkC;IAClC,MAAM,UAAU,GAAG,eAAe,GAAG,UAAU,GAAG,aAAa,CAAC;IAEhE,kBAAkB;IAClB,MAAM,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC;IACpD,MAAM,qBAAqB,GAAG,CAAC,cAAc,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IAEvE,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,eAAe,GAAG,mBAAmB,CAAC;IAChE,MAAM,YAAY,GAAG,UAAU,GAAG,mBAAmB,CAAC;IAEtD,yBAAyB;IACzB,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAC/D,MAAM,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC;IAErD,iBAAiB;IACjB,MAAM,aAAa,GAAG,kBAAkB,GAAG,aAAa,CAAC;IAEzD,iDAAiD;IACjD,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,gBAAgB;IAChB,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAC1D,MAAM,cAAc,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAErD,OAAO;QACL,UAAU;QACV,UAAU;QACV,eAAe;QACf,UAAU;QACV,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windOutput.d.ts","sourceRoot":"","sources":["../../src/energy/windOutput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"windOutput.d.ts","sourceRoot":"","sources":["../../src/energy/windOutput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAuEnE"}
|
|
@@ -18,6 +18,14 @@ import { roundTo } from '../utils.js';
|
|
|
18
18
|
*/
|
|
19
19
|
export function windOutput(input) {
|
|
20
20
|
const { ratedPower, hubHeight, averageWindSpeed, referenceHeight = 10, cutInSpeed = 3, cutOutSpeed = 25, ratedSpeed = 12, rotorDiameter, terrainRoughness = 0.143, } = input;
|
|
21
|
+
// The Hellmann power law raises the height ratio to a fractional exponent, so a negative
|
|
22
|
+
// hub height gives a complex wind speed and every downstream figure becomes NaN.
|
|
23
|
+
if (!(hubHeight > 0)) {
|
|
24
|
+
throw new RangeError('hubHeight must be greater than 0');
|
|
25
|
+
}
|
|
26
|
+
if (!(referenceHeight > 0)) {
|
|
27
|
+
throw new RangeError('referenceHeight must be greater than 0');
|
|
28
|
+
}
|
|
21
29
|
// Wind speed at hub height (Hellmann power law)
|
|
22
30
|
const adjustedWindSpeed = averageWindSpeed * Math.pow(hubHeight / referenceHeight, terrainRoughness);
|
|
23
31
|
// Simplified capacity factor estimate using Rayleigh distribution approximation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windOutput.js","sourceRoot":"","sources":["../../src/energy/windOutput.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"windOutput.js","sourceRoot":"","sources":["../../src/energy/windOutput.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esgSummary.d.ts","sourceRoot":"","sources":["../../src/environmental/esgSummary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"esgSummary.d.ts","sourceRoot":"","sources":["../../src/environmental/esgSummary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAmDnE"}
|
|
@@ -9,6 +9,11 @@ import { roundTo } from '../utils.js';
|
|
|
9
9
|
*/
|
|
10
10
|
export function esgSummary(input) {
|
|
11
11
|
const { baselineYear, baselineCo2Tonnes, currentYear, currentCo2Tonnes, targetYear, targetCo2Tonnes, } = input;
|
|
12
|
+
// The reduction is expressed as a share of the baseline, so a zero baseline has no
|
|
13
|
+
// percentage to report rather than an infinite one.
|
|
14
|
+
if (!(baselineCo2Tonnes > 0)) {
|
|
15
|
+
throw new RangeError('baselineCo2Tonnes must be greater than 0');
|
|
16
|
+
}
|
|
12
17
|
const reductionTonnes = roundTo(baselineCo2Tonnes - currentCo2Tonnes, 2);
|
|
13
18
|
const reductionPercent = roundTo((reductionTonnes / baselineCo2Tonnes) * 100, 2);
|
|
14
19
|
const yearsElapsed = currentYear - baselineYear;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esgSummary.js","sourceRoot":"","sources":["../../src/environmental/esgSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,GAChB,GAAG,KAAK,CAAC;IAEV,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,eAAe,GAAG,iBAAiB,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAEjF,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAChD,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC;QACxC,CAAC,CAAC,OAAO,CAAC,gBAAgB,GAAG,YAAY,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;IAEhD,iDAAiD;IACjD,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IACpE,MAAM,yBAAyB,GAAG,CAAC,wBAAwB,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC;IACvF,MAAM,kBAAkB,GAAG,cAAc,GAAG,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,yBAAyB,GAAG,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC,CAAC;IAEN,uCAAuC;IACvC,MAAM,eAAe,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,OAAO,CAChC,gBAAgB,GAAG,CAAC,eAAe,GAAG,cAAc,CAAC,EACrD,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,iBAAiB,IAAI,kBAAkB,IAAI,gBAAgB,IAAI,eAAe,CAAC;IAE/F,OAAO;QACL,gBAAgB;QAChB,eAAe;QACf,iBAAiB;QACjB,kBAAkB;QAClB,OAAO;QACP,cAAc;QACd,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"esgSummary.js","sourceRoot":"","sources":["../../src/environmental/esgSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,GAChB,GAAG,KAAK,CAAC;IAEV,mFAAmF;IACnF,oDAAoD;IACpD,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,eAAe,GAAG,iBAAiB,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAEjF,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAChD,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC;QACxC,CAAC,CAAC,OAAO,CAAC,gBAAgB,GAAG,YAAY,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;IAEhD,iDAAiD;IACjD,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IACpE,MAAM,yBAAyB,GAAG,CAAC,wBAAwB,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC;IACvF,MAAM,kBAAkB,GAAG,cAAc,GAAG,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,yBAAyB,GAAG,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC,CAAC;IAEN,uCAAuC;IACvC,MAAM,eAAe,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,OAAO,CAChC,gBAAgB,GAAG,CAAC,eAAe,GAAG,cAAc,CAAC,EACrD,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,iBAAiB,IAAI,kBAAkB,IAAI,gBAAgB,IAAI,eAAe,CAAC;IAE/F,OAAO;QACL,gBAAgB;QAChB,eAAe;QACf,iBAAiB;QACjB,kBAAkB;QAClB,OAAO;QACP,cAAc;QACd,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safetyStock.d.ts","sourceRoot":"","sources":["../../src/logistics/safetyStock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"safetyStock.d.ts","sourceRoot":"","sources":["../../src/logistics/safetyStock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAiCtE"}
|
|
@@ -23,6 +23,11 @@ import { normalInvCDF } from '../math.js';
|
|
|
23
23
|
*/
|
|
24
24
|
export function safetyStock(input) {
|
|
25
25
|
const { avgDemand, demandStdDev, avgLeadTime, leadTimeStdDev, serviceLevel } = input;
|
|
26
|
+
// The z-score is the inverse normal CDF of the service level, which diverges at both
|
|
27
|
+
// ends: a level of 0 or 1 has no finite z and the whole result follows it to infinity.
|
|
28
|
+
if (!(serviceLevel > 0) || serviceLevel >= 1) {
|
|
29
|
+
throw new RangeError('serviceLevel must be greater than 0 and less than 1');
|
|
30
|
+
}
|
|
26
31
|
// Calculate z-score for the desired service level
|
|
27
32
|
const zScore = normalInvCDF(serviceLevel);
|
|
28
33
|
// Average demand during lead time
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safetyStock.js","sourceRoot":"","sources":["../../src/logistics/safetyStock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAErF,kDAAkD;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAE1C,kCAAkC;IAClC,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,CAAC;IAErD,uDAAuD;IACvD,sCAAsC;IACtC,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC;IAEhE,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;IAE7C,8CAA8C;IAC9C,MAAM,YAAY,GAAG,oBAAoB,GAAG,gBAAgB,CAAC;IAE7D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,WAAW,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"safetyStock.js","sourceRoot":"","sources":["../../src/logistics/safetyStock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAErF,qFAAqF;IACrF,uFAAuF;IACvF,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,UAAU,CAAC,qDAAqD,CAAC,CAAC;IAC9E,CAAC;IAED,kDAAkD;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAE1C,kCAAkC;IAClC,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,CAAC;IAErD,uDAAuD;IACvD,sCAAsC;IACtC,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC;IAEhE,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;IAE7C,8CAA8C;IAC9C,MAAM,YAAY,GAAG,oBAAoB,GAAG,gBAAgB,CAAC;IAE7D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,WAAW,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boltCircle.d.ts","sourceRoot":"","sources":["../../src/machining/boltCircle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAY,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"boltCircle.d.ts","sourceRoot":"","sources":["../../src/machining/boltCircle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAY,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA8BnE"}
|
|
@@ -14,6 +14,12 @@ import { roundTo } from '../utils.js';
|
|
|
14
14
|
*/
|
|
15
15
|
export function boltCircle(input) {
|
|
16
16
|
const { boltCircleDiameter, numberOfHoles, startAngle = 0 } = input;
|
|
17
|
+
if (!(boltCircleDiameter > 0)) {
|
|
18
|
+
throw new RangeError('boltCircleDiameter must be greater than 0');
|
|
19
|
+
}
|
|
20
|
+
if (!Number.isInteger(numberOfHoles) || numberOfHoles < 1) {
|
|
21
|
+
throw new RangeError('numberOfHoles must be an integer of at least 1');
|
|
22
|
+
}
|
|
17
23
|
const radius = boltCircleDiameter / 2;
|
|
18
24
|
const angularSpacing = 360 / numberOfHoles;
|
|
19
25
|
const holes = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boltCircle.js","sourceRoot":"","sources":["../../src/machining/boltCircle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;IAEpE,MAAM,MAAM,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,GAAG,GAAG,aAAa,CAAC;IAE3C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC;YACT,UAAU,EAAE,CAAC,GAAG,CAAC;YACjB,KAAK,EAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,KAAK;QACL,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"boltCircle.js","sourceRoot":"","sources":["../../src/machining/boltCircle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;IAEpE,IAAI,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,GAAG,GAAG,aAAa,CAAC;IAE3C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC;YACT,UAAU,EAAE,CAAC,GAAG,CAAC;YACjB,KAAK,EAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,KAAK;QACL,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -10,6 +10,9 @@ import type { CuspHeightInput, CuspHeightResult } from './types.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @param input - Cusp height parameters
|
|
12
12
|
* @returns CuspHeightResult with scallop height and approximate Ra
|
|
13
|
+
* @throws RangeError if toolRadius or stepover is not positive, or if stepover exceeds the
|
|
14
|
+
* tool diameter (adjacent passes never meet, so the formula has no scallop to describe —
|
|
15
|
+
* without the guard the square root goes negative and the result is silently NaN)
|
|
13
16
|
*/
|
|
14
17
|
export declare function cuspHeight(input: CuspHeightInput): CuspHeightResult;
|
|
15
18
|
//# sourceMappingURL=cuspHeight.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cuspHeight.d.ts","sourceRoot":"","sources":["../../src/machining/cuspHeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE
|
|
1
|
+
{"version":3,"file":"cuspHeight.d.ts","sourceRoot":"","sources":["../../src/machining/cuspHeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAoBnE"}
|
|
@@ -10,9 +10,21 @@ import { roundTo } from '../utils.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @param input - Cusp height parameters
|
|
12
12
|
* @returns CuspHeightResult with scallop height and approximate Ra
|
|
13
|
+
* @throws RangeError if toolRadius or stepover is not positive, or if stepover exceeds the
|
|
14
|
+
* tool diameter (adjacent passes never meet, so the formula has no scallop to describe —
|
|
15
|
+
* without the guard the square root goes negative and the result is silently NaN)
|
|
13
16
|
*/
|
|
14
17
|
export function cuspHeight(input) {
|
|
15
18
|
const { toolRadius, stepover } = input;
|
|
19
|
+
if (!(toolRadius > 0)) {
|
|
20
|
+
throw new RangeError('toolRadius must be greater than 0');
|
|
21
|
+
}
|
|
22
|
+
if (!(stepover > 0)) {
|
|
23
|
+
throw new RangeError('stepover must be greater than 0');
|
|
24
|
+
}
|
|
25
|
+
if (stepover > 2 * toolRadius) {
|
|
26
|
+
throw new RangeError('stepover must not exceed the tool diameter (2 x toolRadius)');
|
|
27
|
+
}
|
|
16
28
|
const halfStep = stepover / 2;
|
|
17
29
|
const h = toolRadius - Math.sqrt(toolRadius * toolRadius - halfStep * halfStep);
|
|
18
30
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cuspHeight.js","sourceRoot":"","sources":["../../src/machining/cuspHeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"cuspHeight.js","sourceRoot":"","sources":["../../src/machining/cuspHeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEvC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,6DAA6D,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAEhF,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACzB,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,iCAAiC;KAChF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radialChipThinning.d.ts","sourceRoot":"","sources":["../../src/machining/radialChipThinning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,
|
|
1
|
+
{"version":3,"file":"radialChipThinning.d.ts","sourceRoot":"","sources":["../../src/machining/radialChipThinning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAyB3F"}
|
|
@@ -16,6 +16,15 @@ import { roundTo } from '../utils.js';
|
|
|
16
16
|
*/
|
|
17
17
|
export function radialChipThinning(input) {
|
|
18
18
|
const { toolDiameter, radialDepthOfCut, chipLoadTarget } = input;
|
|
19
|
+
// The thinning factor divides by sqrt(ae x (D - ae)); outside 0 < ae < D that radicand
|
|
20
|
+
// is zero or negative, which is a cut the geometry does not describe rather than an
|
|
21
|
+
// infinitely thinned chip.
|
|
22
|
+
if (!(toolDiameter > 0)) {
|
|
23
|
+
throw new RangeError('toolDiameter must be greater than 0');
|
|
24
|
+
}
|
|
25
|
+
if (!(radialDepthOfCut > 0) || radialDepthOfCut >= toolDiameter) {
|
|
26
|
+
throw new RangeError('radialDepthOfCut must be greater than 0 and less than toolDiameter');
|
|
27
|
+
}
|
|
19
28
|
const D = toolDiameter;
|
|
20
29
|
const ae = radialDepthOfCut;
|
|
21
30
|
// Factor = D / (2 × √(ae × (D - ae)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radialChipThinning.js","sourceRoot":"","sources":["../../src/machining/radialChipThinning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEjE,MAAM,CAAC,GAAG,YAAY,CAAC;IACvB,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAE5B,sCAAsC;IACtC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,CAAC;IAE3C,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"radialChipThinning.js","sourceRoot":"","sources":["../../src/machining/radialChipThinning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEjE,uFAAuF;IACvF,oFAAoF;IACpF,2BAA2B;IAC3B,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,gBAAgB,IAAI,YAAY,EAAE,CAAC;QAChE,MAAM,IAAI,UAAU,CAAC,oEAAoE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,GAAG,YAAY,CAAC;IACvB,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAE5B,sCAAsC;IACtC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,CAAC;IAE3C,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triangleSolver.d.ts","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK5E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"triangleSolver.d.ts","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK5E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAwG/E"}
|
|
@@ -22,6 +22,18 @@ const RAD = 180 / Math.PI;
|
|
|
22
22
|
*/
|
|
23
23
|
export function triangleSolver(input) {
|
|
24
24
|
let { a, b, c, A, B, C } = input;
|
|
25
|
+
// A side of zero collapses the law of cosines onto a zero denominator and every angle
|
|
26
|
+
// comes back NaN; an angle outside (0, 180) is not an angle of a triangle at all.
|
|
27
|
+
for (const [name, side] of [['a', a], ['b', b], ['c', c]]) {
|
|
28
|
+
if (side !== undefined && !(side > 0)) {
|
|
29
|
+
throw new RangeError(`side ${name} must be greater than 0`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
for (const [name, angle] of [['A', A], ['B', B], ['C', C]]) {
|
|
33
|
+
if (angle !== undefined && (!(angle > 0) || angle >= 180)) {
|
|
34
|
+
throw new RangeError(`angle ${name} must be greater than 0 and less than 180`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
25
37
|
// Count known values
|
|
26
38
|
const knownSides = [a, b, c].filter(v => v !== undefined).length;
|
|
27
39
|
const knownAngles = [A, B, C].filter(v => v !== undefined).length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triangleSolver.js","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"triangleSolver.js","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kFactorReverse.d.ts","sourceRoot":"","sources":["../../src/metal/kFactorReverse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvG;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"kFactorReverse.d.ts","sourceRoot":"","sources":["../../src/metal/kFactorReverse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvG;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA2C/E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,wBAAwB,SAAO,GAC9B,yBAAyB,CAa3B"}
|
|
@@ -17,6 +17,14 @@ import { propagate } from '../math.js';
|
|
|
17
17
|
*/
|
|
18
18
|
export function kFactorReverse(input) {
|
|
19
19
|
const { thickness, bendAngle, insideRadius, measuredFlatLength, legA, legB, } = input;
|
|
20
|
+
// The K-factor divides by the bend angle in radians and again by the thickness, so a
|
|
21
|
+
// zero in either place yields an infinite K rather than a sheet that cannot be bent.
|
|
22
|
+
if (!(thickness > 0)) {
|
|
23
|
+
throw new RangeError('thickness must be greater than 0');
|
|
24
|
+
}
|
|
25
|
+
if (!(bendAngle > 0) || bendAngle >= 180) {
|
|
26
|
+
throw new RangeError('bendAngle must be greater than 0 and less than 180');
|
|
27
|
+
}
|
|
20
28
|
// Convert bend angle to radians
|
|
21
29
|
const bendAngleRad = (bendAngle * Math.PI) / 180;
|
|
22
30
|
// Calculate bend deduction from measured data
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kFactorReverse.js","sourceRoot":"","sources":["../../src/metal/kFactorReverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EACJ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,IAAI,EACJ,IAAI,GACL,GAAG,KAAK,CAAC;IAEV,gCAAgC;IAChC,MAAM,YAAY,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAEjD,8CAA8C;IAC9C,qDAAqD;IACrD,2CAA2C;IAC3C,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,kBAAkB,CAAC;IAE5C,mCAAmC;IACnC,MAAM,YAAY,GAAG,YAAY,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEjE,4CAA4C;IAC5C,2CAA2C;IAC3C,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IAEzB,qCAAqC;IACrC,iDAAiD;IACjD,oDAAoD;IACpD,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,SAAS,CAAC;IAE/D,OAAO;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,wBAAwB,GAAG,IAAI;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CACnC,KAAK,EACL;QACE,kBAAkB,EAAE,wBAAwB;QAC5C,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,wBAAwB;QAC9B,YAAY,EAAE,wBAAwB;KACvC,EACD,cAAc,EACd,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAC3B,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AAC9D,CAAC"}
|
|
1
|
+
{"version":3,"file":"kFactorReverse.js","sourceRoot":"","sources":["../../src/metal/kFactorReverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EACJ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,IAAI,EACJ,IAAI,GACL,GAAG,KAAK,CAAC;IAEV,qFAAqF;IACrF,qFAAqF;IACrF,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACzC,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;IAC7E,CAAC;IAED,gCAAgC;IAChC,MAAM,YAAY,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAEjD,8CAA8C;IAC9C,qDAAqD;IACrD,2CAA2C;IAC3C,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,kBAAkB,CAAC;IAE5C,mCAAmC;IACnC,MAAM,YAAY,GAAG,YAAY,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEjE,4CAA4C;IAC5C,2CAA2C;IAC3C,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IAEzB,qCAAqC;IACrC,iDAAiD;IACjD,oDAAoD;IACpD,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,SAAS,CAAC;IAE/D,OAAO;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,wBAAwB,GAAG,IAAI;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CACnC,KAAK,EACL;QACE,kBAAkB,EAAE,wBAAwB;QAC5C,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,wBAAwB;QAC9B,YAAY,EAAE,wBAAwB;KACvC,EACD,cAAc,EACd,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAC3B,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AAC9D,CAAC"}
|
package/dist/quality/mtbf.d.ts
CHANGED
|
@@ -6,6 +6,26 @@ import type { MtbfInput, MtbfResult } from './types.js';
|
|
|
6
6
|
* MTTR = Total Repair Time / Number of Failures
|
|
7
7
|
* Availability = MTBF / (MTBF + MTTR)
|
|
8
8
|
*
|
|
9
|
+
* Each output maps to a defined term:
|
|
10
|
+
* - `mtbf` — "average of the times between failures" (EN 13306:2017, 11.3). Note that a
|
|
11
|
+
* time between failures (9.18) is the duration between consecutive failures and "may
|
|
12
|
+
* include non-operating time after restoration"; when the input is operating time, as
|
|
13
|
+
* here, the quantity computed is strictly the mean operating time between failures
|
|
14
|
+
* (MOTBF, 11.2 — "average of the operating times between failures", applied to
|
|
15
|
+
* repairable items). Industry practice calls this figure MTBF, and the name is kept for
|
|
16
|
+
* that reason.
|
|
17
|
+
* - `mttr` — mean repair time (MRT, 11.4: "average of the repair times"). MTTR is the
|
|
18
|
+
* common industry spelling of the same average.
|
|
19
|
+
* - `availability` — the time-based availability ratio of 4.9: up time over total time
|
|
20
|
+
* (UT / (UT + DT)), expressed as a percentage.
|
|
21
|
+
* - `failureRate`, `reliabilityAtMtbf` — the constant-failure-rate (exponential) model,
|
|
22
|
+
* lambda = 1 / MTBF and R(t) = exp(-lambda·t). Not part of the terminology standard;
|
|
23
|
+
* it holds only during a constant failure period, and R(MTBF) = e^-1 always.
|
|
24
|
+
*
|
|
25
|
+
* @reference EN 13306:2017 — Maintenance terminology. 11.3 (mean time between failures),
|
|
26
|
+
* 11.2 (mean operating time between failures), 11.4 (mean repair time), 9.18 (time
|
|
27
|
+
* between failures), 4.9 (time based availability).
|
|
28
|
+
*
|
|
9
29
|
* @param input - MTBF input parameters
|
|
10
30
|
* @returns MTBF analysis result
|
|
11
31
|
* @throws RangeError if totalOperatingTime is not positive, or if
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtbf.d.ts","sourceRoot":"","sources":["../../src/quality/mtbf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"mtbf.d.ts","sourceRoot":"","sources":["../../src/quality/mtbf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CA8CjD"}
|
package/dist/quality/mtbf.js
CHANGED
|
@@ -6,6 +6,26 @@ import { roundTo } from '../utils.js';
|
|
|
6
6
|
* MTTR = Total Repair Time / Number of Failures
|
|
7
7
|
* Availability = MTBF / (MTBF + MTTR)
|
|
8
8
|
*
|
|
9
|
+
* Each output maps to a defined term:
|
|
10
|
+
* - `mtbf` — "average of the times between failures" (EN 13306:2017, 11.3). Note that a
|
|
11
|
+
* time between failures (9.18) is the duration between consecutive failures and "may
|
|
12
|
+
* include non-operating time after restoration"; when the input is operating time, as
|
|
13
|
+
* here, the quantity computed is strictly the mean operating time between failures
|
|
14
|
+
* (MOTBF, 11.2 — "average of the operating times between failures", applied to
|
|
15
|
+
* repairable items). Industry practice calls this figure MTBF, and the name is kept for
|
|
16
|
+
* that reason.
|
|
17
|
+
* - `mttr` — mean repair time (MRT, 11.4: "average of the repair times"). MTTR is the
|
|
18
|
+
* common industry spelling of the same average.
|
|
19
|
+
* - `availability` — the time-based availability ratio of 4.9: up time over total time
|
|
20
|
+
* (UT / (UT + DT)), expressed as a percentage.
|
|
21
|
+
* - `failureRate`, `reliabilityAtMtbf` — the constant-failure-rate (exponential) model,
|
|
22
|
+
* lambda = 1 / MTBF and R(t) = exp(-lambda·t). Not part of the terminology standard;
|
|
23
|
+
* it holds only during a constant failure period, and R(MTBF) = e^-1 always.
|
|
24
|
+
*
|
|
25
|
+
* @reference EN 13306:2017 — Maintenance terminology. 11.3 (mean time between failures),
|
|
26
|
+
* 11.2 (mean operating time between failures), 11.4 (mean repair time), 9.18 (time
|
|
27
|
+
* between failures), 4.9 (time based availability).
|
|
28
|
+
*
|
|
9
29
|
* @param input - MTBF input parameters
|
|
10
30
|
* @returns MTBF analysis result
|
|
11
31
|
* @throws RangeError if totalOperatingTime is not positive, or if
|
|
@@ -20,19 +40,28 @@ export function mtbf(input) {
|
|
|
20
40
|
if (numberOfFailures <= 0) {
|
|
21
41
|
throw new RangeError('numberOfFailures must be greater than 0');
|
|
22
42
|
}
|
|
43
|
+
if (totalRepairTime < 0) {
|
|
44
|
+
throw new RangeError('totalRepairTime must not be negative');
|
|
45
|
+
}
|
|
46
|
+
// Every derived figure below is computed from the raw times, never from the rounded
|
|
47
|
+
// values reported back. Rounding an intermediate to 2 decimals and then dividing by it
|
|
48
|
+
// is not a rounding whisker: with short times spread over many failures the rounded
|
|
49
|
+
// mean is a large fraction of its own value, and availability drifts by whole points
|
|
50
|
+
// (1 h operating / 0.5 h repair / 34 failures reads 75% that way, against a true 66.67%).
|
|
51
|
+
const mtbfExact = totalOperatingTime / numberOfFailures;
|
|
52
|
+
const mttrExact = totalRepairTime / numberOfFailures;
|
|
23
53
|
// MTBF = Total Operating Time / Number of Failures
|
|
24
|
-
const mtbfValue = roundTo(
|
|
54
|
+
const mtbfValue = roundTo(mtbfExact, 2);
|
|
25
55
|
// MTTR = Total Repair Time / Number of Failures
|
|
26
|
-
const mttr =
|
|
27
|
-
// Availability = MTBF / (MTBF + MTTR)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
: 0;
|
|
56
|
+
const mttr = roundTo(mttrExact, 2);
|
|
57
|
+
// Availability = MTBF / (MTBF + MTTR). The failure count cancels, leaving the 4.9
|
|
58
|
+
// time-based ratio of up time to total time.
|
|
59
|
+
const availability = roundTo((totalOperatingTime / (totalOperatingTime + totalRepairTime)) * 100, 2);
|
|
31
60
|
// Failure rate (lambda) = 1 / MTBF
|
|
32
|
-
const failureRate =
|
|
61
|
+
const failureRate = roundTo(1 / mtbfExact, 6);
|
|
33
62
|
// Reliability at time T = e^(-lambda * T), where T = MTBF
|
|
34
|
-
// R(MTBF) = e^(-1) = 0.3679 = 36.79
|
|
35
|
-
const reliabilityAtMtbf =
|
|
63
|
+
// R(MTBF) = e^(-1) = 0.3679 = 36.79%, whatever the MTBF is
|
|
64
|
+
const reliabilityAtMtbf = roundTo(Math.exp(-1) * 100, 2);
|
|
36
65
|
return {
|
|
37
66
|
mtbf: mtbfValue,
|
|
38
67
|
mttr,
|
package/dist/quality/mtbf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtbf.js","sourceRoot":"","sources":["../../src/quality/mtbf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"mtbf.js","sourceRoot":"","sources":["../../src/quality/mtbf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAExE,kBAAkB;IAClB,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IAED,oFAAoF;IACpF,uFAAuF;IACvF,oFAAoF;IACpF,qFAAqF;IACrF,0FAA0F;IAC1F,MAAM,SAAS,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;IACxD,MAAM,SAAS,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAErD,mDAAmD;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAExC,gDAAgD;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEnC,kFAAkF;IAClF,6CAA6C;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,kBAAkB,GAAG,CAAC,kBAAkB,GAAG,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAErG,mCAAmC;IACnC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAE9C,0DAA0D;IAC1D,2DAA2D;IAC3D,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI;QACJ,YAAY;QACZ,WAAW;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"illuminance.d.ts","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAStC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAsD,CAAC;AAiB5G;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"illuminance.d.ts","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAStC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAsD,CAAC;AAiB5G;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAwEtE"}
|
|
@@ -47,6 +47,9 @@ export function illuminance(input) {
|
|
|
47
47
|
if (roomLength <= 0 || roomWidth <= 0 || lumensPerLuminaire <= 0 || targetLux <= 0) {
|
|
48
48
|
throw new RangeError('roomLength, roomWidth, lumensPerLuminaire, and targetLux must all be greater than 0');
|
|
49
49
|
}
|
|
50
|
+
if (!(mf > 0)) {
|
|
51
|
+
throw new RangeError('mf (maintenance factor) must be greater than 0');
|
|
52
|
+
}
|
|
50
53
|
const area = roomLength * roomWidth;
|
|
51
54
|
const hm = luminaireHeight - workplaneHeight;
|
|
52
55
|
if (hm <= 0) {
|
|
@@ -60,6 +63,11 @@ export function illuminance(input) {
|
|
|
60
63
|
// the caller can tell the user the CU is a boundary approximation rather than a table value.
|
|
61
64
|
const cu = cuOverride ?? lookupCU(roomIndex);
|
|
62
65
|
const roomIndexClamped = cuOverride === undefined && (roomIndex < CU_TABLE_RANGE[0] || roomIndex > CU_TABLE_RANGE[1]);
|
|
66
|
+
// The luminaire count divides by CU x MF; a zero coefficient of utilization means no
|
|
67
|
+
// light reaches the workplane, which is not a fixture count.
|
|
68
|
+
if (!(cu > 0)) {
|
|
69
|
+
throw new RangeError('cu (coefficient of utilization) must be greater than 0');
|
|
70
|
+
}
|
|
63
71
|
// Number of luminaires: N = (E × A) / (Φ × CU × MF)
|
|
64
72
|
const nExact = (targetLux * area) / (lumensPerLuminaire * cu * mf);
|
|
65
73
|
const fixturesNeeded = Math.ceil(nExact);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"illuminance.js","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,cAAc,GAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5G,SAAS,QAAQ,CAAC,SAAiB;IACjC,IAAI,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAC1C,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,eAAe,GAAG,IAAI,EACtB,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,EAAE,EAAE,UAAU,EACd,EAAE,GAAG,GAAG,GACT,GAAG,KAAK,CAAC;IAEV,IAAI,UAAU,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,UAAU,CAAC,qFAAqF,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,GAAG,eAAe,GAAG,eAAe,CAAC;IAE7C,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;IAC/E,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC;IAE7E,uFAAuF;IACvF,2FAA2F;IAC3F,4FAA4F;IAC5F,6FAA6F;IAC7F,MAAM,EAAE,GAAG,UAAU,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GACpB,UAAU,KAAK,SAAS,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/F,oDAAoD;IACpD,MAAM,MAAM,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEzC,wCAAwC;IACxC,MAAM,WAAW,GAAG,cAAc,GAAG,kBAAkB,CAAC;IACxD,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAEjD,gBAAgB;IAChB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAC7D,YAAY,GAAG,CAAC,cAAc,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC7D,CAAC;IAED,qCAAqC;IACrC,MAAM,kBAAkB,GAAG,GAAG,GAAG,EAAE,CAAC;IAEpC,OAAO;QACL,cAAc;QACd,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,gBAAgB;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACrE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;KACnD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"illuminance.js","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "formulab",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"description": "Manufacturing & Engineering calculation formulas library - 203 industrial calculations across 15 domains for OEE, Cpk, SPC, FMEA, Nelson Rules, metal weight, CNC machining, GD&T, battery, environmental, pipe flow, logistics, IE time study, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|