formulab 0.1.11 → 0.5.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 +107 -10
- package/README.md +109 -17
- package/dist/automotive/brakingDistance.d.ts +16 -0
- package/dist/automotive/brakingDistance.d.ts.map +1 -0
- package/dist/automotive/brakingDistance.js +47 -0
- package/dist/automotive/brakingDistance.js.map +1 -0
- package/dist/automotive/index.d.ts +2 -1
- package/dist/automotive/index.d.ts.map +1 -1
- package/dist/automotive/index.js +1 -0
- package/dist/automotive/index.js.map +1 -1
- package/dist/automotive/types.d.ts +16 -0
- package/dist/automotive/types.d.ts.map +1 -1
- package/dist/battery/batteryPackConfig.d.ts +10 -0
- package/dist/battery/batteryPackConfig.d.ts.map +1 -0
- package/dist/battery/batteryPackConfig.js +28 -0
- package/dist/battery/batteryPackConfig.js.map +1 -0
- package/dist/battery/bmsBalancing.d.ts +11 -0
- package/dist/battery/bmsBalancing.d.ts.map +1 -0
- package/dist/battery/bmsBalancing.js +47 -0
- package/dist/battery/bmsBalancing.js.map +1 -0
- package/dist/battery/cRate.d.ts +10 -0
- package/dist/battery/cRate.d.ts.map +1 -0
- package/dist/battery/cRate.js +29 -0
- package/dist/battery/cRate.js.map +1 -0
- package/dist/battery/chargingProfile.d.ts +11 -0
- package/dist/battery/chargingProfile.d.ts.map +1 -0
- package/dist/battery/chargingProfile.js +38 -0
- package/dist/battery/chargingProfile.js.map +1 -0
- package/dist/battery/cycleLife.d.ts +11 -0
- package/dist/battery/cycleLife.d.ts.map +1 -0
- package/dist/battery/cycleLife.js +70 -0
- package/dist/battery/cycleLife.js.map +1 -0
- package/dist/battery/energyDensity.d.ts +10 -0
- package/dist/battery/energyDensity.d.ts.map +1 -0
- package/dist/battery/energyDensity.js +20 -0
- package/dist/battery/energyDensity.js.map +1 -0
- package/dist/battery/index.d.ts +12 -0
- package/dist/battery/index.d.ts.map +1 -0
- package/dist/battery/index.js +12 -0
- package/dist/battery/index.js.map +1 -0
- package/dist/battery/internalResistance.d.ts +11 -0
- package/dist/battery/internalResistance.d.ts.map +1 -0
- package/dist/battery/internalResistance.js +18 -0
- package/dist/battery/internalResistance.js.map +1 -0
- package/dist/battery/selfDischarge.d.ts +10 -0
- package/dist/battery/selfDischarge.d.ts.map +1 -0
- package/dist/battery/selfDischarge.js +17 -0
- package/dist/battery/selfDischarge.js.map +1 -0
- package/dist/battery/stateOfHealth.d.ts +11 -0
- package/dist/battery/stateOfHealth.d.ts.map +1 -0
- package/dist/battery/stateOfHealth.js +33 -0
- package/dist/battery/stateOfHealth.js.map +1 -0
- package/dist/battery/thermalRunaway.d.ts +11 -0
- package/dist/battery/thermalRunaway.d.ts.map +1 -0
- package/dist/battery/thermalRunaway.js +28 -0
- package/dist/battery/thermalRunaway.js.map +1 -0
- package/dist/battery/types.d.ts +175 -0
- package/dist/battery/types.d.ts.map +1 -0
- package/dist/battery/types.js +5 -0
- package/dist/battery/types.js.map +1 -0
- package/dist/chemical/dilution.d.ts.map +1 -1
- package/dist/chemical/dilution.js +21 -24
- package/dist/chemical/dilution.js.map +1 -1
- package/dist/chemical/heatTransfer.d.ts +16 -0
- package/dist/chemical/heatTransfer.d.ts.map +1 -0
- package/dist/chemical/heatTransfer.js +85 -0
- package/dist/chemical/heatTransfer.js.map +1 -0
- package/dist/chemical/index.d.ts +3 -1
- package/dist/chemical/index.d.ts.map +1 -1
- package/dist/chemical/index.js +2 -0
- package/dist/chemical/index.js.map +1 -1
- package/dist/chemical/pipeFlow.d.ts +17 -0
- package/dist/chemical/pipeFlow.d.ts.map +1 -0
- package/dist/chemical/pipeFlow.js +112 -0
- package/dist/chemical/pipeFlow.js.map +1 -0
- package/dist/chemical/reactor.js +2 -2
- package/dist/chemical/reactor.js.map +1 -1
- package/dist/chemical/types.d.ts +82 -10
- package/dist/chemical/types.d.ts.map +1 -1
- package/dist/construction/index.d.ts +2 -1
- package/dist/construction/index.d.ts.map +1 -1
- package/dist/construction/index.js +1 -0
- package/dist/construction/index.js.map +1 -1
- package/dist/construction/momentOfInertia.d.ts +17 -0
- package/dist/construction/momentOfInertia.d.ts.map +1 -0
- package/dist/construction/momentOfInertia.js +204 -0
- package/dist/construction/momentOfInertia.js.map +1 -0
- package/dist/construction/pert.d.ts.map +1 -1
- package/dist/construction/pert.js +1 -17
- package/dist/construction/pert.js.map +1 -1
- package/dist/construction/types.d.ts +50 -0
- package/dist/construction/types.d.ts.map +1 -1
- package/dist/electronics/index.d.ts +2 -1
- package/dist/electronics/index.d.ts.map +1 -1
- package/dist/electronics/index.js +1 -0
- package/dist/electronics/index.js.map +1 -1
- package/dist/electronics/ohmsLaw.d.ts +12 -0
- package/dist/electronics/ohmsLaw.d.ts.map +1 -0
- package/dist/electronics/ohmsLaw.js +69 -0
- package/dist/electronics/ohmsLaw.js.map +1 -0
- package/dist/electronics/types.d.ts +24 -0
- package/dist/electronics/types.d.ts.map +1 -1
- package/dist/energy/carbonFootprint.d.ts.map +1 -1
- package/dist/energy/carbonFootprint.js +2 -1
- package/dist/energy/carbonFootprint.js.map +1 -1
- package/dist/energy/index.d.ts +2 -1
- package/dist/energy/index.d.ts.map +1 -1
- package/dist/energy/index.js +1 -0
- package/dist/energy/index.js.map +1 -1
- package/dist/energy/powerCost.d.ts.map +1 -1
- package/dist/energy/powerCost.js +2 -1
- package/dist/energy/powerCost.js.map +1 -1
- package/dist/energy/solarOutput.d.ts +14 -0
- package/dist/energy/solarOutput.d.ts.map +1 -0
- package/dist/energy/solarOutput.js +54 -0
- package/dist/energy/solarOutput.js.map +1 -0
- package/dist/energy/types.d.ts +20 -0
- package/dist/energy/types.d.ts.map +1 -1
- package/dist/environmental/emissionsIntensity.d.ts +11 -0
- package/dist/environmental/emissionsIntensity.d.ts.map +1 -0
- package/dist/environmental/emissionsIntensity.js +26 -0
- package/dist/environmental/emissionsIntensity.js.map +1 -0
- package/dist/environmental/energyIntensity.d.ts +11 -0
- package/dist/environmental/energyIntensity.d.ts.map +1 -0
- package/dist/environmental/energyIntensity.js +19 -0
- package/dist/environmental/energyIntensity.js.map +1 -0
- package/dist/environmental/esgSummary.d.ts +11 -0
- package/dist/environmental/esgSummary.d.ts.map +1 -0
- package/dist/environmental/esgSummary.js +39 -0
- package/dist/environmental/esgSummary.js.map +1 -0
- package/dist/environmental/gwpCalculator.d.ts +11 -0
- package/dist/environmental/gwpCalculator.d.ts.map +1 -0
- package/dist/environmental/gwpCalculator.js +31 -0
- package/dist/environmental/gwpCalculator.js.map +1 -0
- package/dist/environmental/index.d.ts +12 -0
- package/dist/environmental/index.d.ts.map +1 -0
- package/dist/environmental/index.js +12 -0
- package/dist/environmental/index.js.map +1 -0
- package/dist/environmental/productCarbonFootprint.d.ts +11 -0
- package/dist/environmental/productCarbonFootprint.d.ts.map +1 -0
- package/dist/environmental/productCarbonFootprint.js +29 -0
- package/dist/environmental/productCarbonFootprint.js.map +1 -0
- package/dist/environmental/scope1Emissions.d.ts +11 -0
- package/dist/environmental/scope1Emissions.d.ts.map +1 -0
- package/dist/environmental/scope1Emissions.js +35 -0
- package/dist/environmental/scope1Emissions.js.map +1 -0
- package/dist/environmental/scope2Emissions.d.ts +11 -0
- package/dist/environmental/scope2Emissions.d.ts.map +1 -0
- package/dist/environmental/scope2Emissions.js +49 -0
- package/dist/environmental/scope2Emissions.js.map +1 -0
- package/dist/environmental/scope3Emissions.d.ts +11 -0
- package/dist/environmental/scope3Emissions.d.ts.map +1 -0
- package/dist/environmental/scope3Emissions.js +36 -0
- package/dist/environmental/scope3Emissions.js.map +1 -0
- package/dist/environmental/types.d.ts +165 -0
- package/dist/environmental/types.d.ts.map +1 -0
- package/dist/environmental/types.js +5 -0
- package/dist/environmental/types.js.map +1 -0
- package/dist/environmental/vocEmissions.d.ts +11 -0
- package/dist/environmental/vocEmissions.d.ts.map +1 -0
- package/dist/environmental/vocEmissions.js +23 -0
- package/dist/environmental/vocEmissions.js.map +1 -0
- package/dist/environmental/waterFootprint.d.ts +11 -0
- package/dist/environmental/waterFootprint.d.ts.map +1 -0
- package/dist/environmental/waterFootprint.js +21 -0
- package/dist/environmental/waterFootprint.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/logistics/cbm.d.ts +7 -2
- package/dist/logistics/cbm.d.ts.map +1 -1
- package/dist/logistics/cbm.js +7 -2
- package/dist/logistics/cbm.js.map +1 -1
- package/dist/logistics/fillRate.d.ts.map +1 -1
- package/dist/logistics/fillRate.js +1 -17
- package/dist/logistics/fillRate.js.map +1 -1
- package/dist/logistics/safetyStock.d.ts.map +1 -1
- package/dist/logistics/safetyStock.js +2 -55
- package/dist/logistics/safetyStock.js.map +1 -1
- package/dist/machining/boltCircle.d.ts +16 -0
- package/dist/machining/boltCircle.d.ts.map +1 -0
- package/dist/machining/boltCircle.js +36 -0
- package/dist/machining/boltCircle.js.map +1 -0
- package/dist/machining/boringBarDeflection.d.ts +17 -0
- package/dist/machining/boringBarDeflection.d.ts.map +1 -0
- package/dist/machining/boringBarDeflection.js +54 -0
- package/dist/machining/boringBarDeflection.js.map +1 -0
- package/dist/machining/cuspHeight.d.ts +15 -0
- package/dist/machining/cuspHeight.d.ts.map +1 -0
- package/dist/machining/cuspHeight.js +23 -0
- package/dist/machining/cuspHeight.js.map +1 -0
- package/dist/machining/cycleTimeEstimator.d.ts +18 -0
- package/dist/machining/cycleTimeEstimator.d.ts.map +1 -0
- package/dist/machining/cycleTimeEstimator.js +62 -0
- package/dist/machining/cycleTimeEstimator.js.map +1 -0
- package/dist/machining/effectiveDiameter.d.ts +17 -0
- package/dist/machining/effectiveDiameter.d.ts.map +1 -0
- package/dist/machining/effectiveDiameter.js +24 -0
- package/dist/machining/effectiveDiameter.js.map +1 -0
- package/dist/machining/gaugeBlockStack.d.ts +16 -0
- package/dist/machining/gaugeBlockStack.d.ts.map +1 -0
- package/dist/machining/gaugeBlockStack.js +138 -0
- package/dist/machining/gaugeBlockStack.js.map +1 -0
- package/dist/machining/index.d.ts +14 -0
- package/dist/machining/index.d.ts.map +1 -0
- package/dist/machining/index.js +14 -0
- package/dist/machining/index.js.map +1 -0
- package/dist/machining/radialChipThinning.d.ts +18 -0
- package/dist/machining/radialChipThinning.d.ts.map +1 -0
- package/dist/machining/radialChipThinning.js +30 -0
- package/dist/machining/radialChipThinning.js.map +1 -0
- package/dist/machining/sineBarHeight.d.ts +16 -0
- package/dist/machining/sineBarHeight.d.ts.map +1 -0
- package/dist/machining/sineBarHeight.js +32 -0
- package/dist/machining/sineBarHeight.js.map +1 -0
- package/dist/machining/threadOverWires.d.ts +21 -0
- package/dist/machining/threadOverWires.d.ts.map +1 -0
- package/dist/machining/threadOverWires.js +54 -0
- package/dist/machining/threadOverWires.js.map +1 -0
- package/dist/machining/toolDeflection.d.ts +16 -0
- package/dist/machining/toolDeflection.d.ts.map +1 -0
- package/dist/machining/toolDeflection.js +36 -0
- package/dist/machining/toolDeflection.js.map +1 -0
- package/dist/machining/triangleSolver.d.ts +21 -0
- package/dist/machining/triangleSolver.d.ts.map +1 -0
- package/dist/machining/triangleSolver.js +120 -0
- package/dist/machining/triangleSolver.js.map +1 -0
- package/dist/machining/truePosition.d.ts +19 -0
- package/dist/machining/truePosition.d.ts.map +1 -0
- package/dist/machining/truePosition.js +44 -0
- package/dist/machining/truePosition.js.map +1 -0
- package/dist/machining/types.d.ts +201 -0
- package/dist/machining/types.d.ts.map +1 -0
- package/dist/machining/types.js +2 -0
- package/dist/machining/types.js.map +1 -0
- package/dist/math.d.ts +26 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +95 -0
- package/dist/math.js.map +1 -0
- package/dist/metal/bendAllowance.d.ts.map +1 -1
- package/dist/metal/bendAllowance.js +2 -1
- package/dist/metal/bendAllowance.js.map +1 -1
- package/dist/metal/bolt.d.ts.map +1 -1
- package/dist/metal/bolt.js +3 -3
- package/dist/metal/bolt.js.map +1 -1
- package/dist/metal/flangeSpec.d.ts +10 -0
- package/dist/metal/flangeSpec.d.ts.map +1 -0
- package/dist/metal/flangeSpec.js +81 -0
- package/dist/metal/flangeSpec.js.map +1 -0
- package/dist/metal/index.d.ts +4 -1
- package/dist/metal/index.d.ts.map +1 -1
- package/dist/metal/index.js +3 -0
- package/dist/metal/index.js.map +1 -1
- package/dist/metal/materialGradeConverter.d.ts +10 -0
- package/dist/metal/materialGradeConverter.d.ts.map +1 -0
- package/dist/metal/materialGradeConverter.js +78 -0
- package/dist/metal/materialGradeConverter.js.map +1 -0
- package/dist/metal/metalWeight.d.ts +13 -3
- package/dist/metal/metalWeight.d.ts.map +1 -1
- package/dist/metal/metalWeight.js +24 -35
- package/dist/metal/metalWeight.js.map +1 -1
- package/dist/metal/pipeSpec.d.ts +10 -0
- package/dist/metal/pipeSpec.d.ts.map +1 -0
- package/dist/metal/pipeSpec.js +96 -0
- package/dist/metal/pipeSpec.js.map +1 -0
- package/dist/metal/roughness.js +1 -1
- package/dist/metal/roughness.js.map +1 -1
- package/dist/metal/types.d.ts +86 -13
- package/dist/metal/types.d.ts.map +1 -1
- package/dist/metal/weldHeat.js +1 -1
- package/dist/metal/weldHeat.js.map +1 -1
- package/dist/metal/welding.d.ts.map +1 -1
- package/dist/metal/welding.js +3 -2
- package/dist/metal/welding.js.map +1 -1
- package/dist/quality/controlChart.d.ts +26 -0
- package/dist/quality/controlChart.d.ts.map +1 -0
- package/dist/quality/controlChart.js +216 -0
- package/dist/quality/controlChart.js.map +1 -0
- package/dist/quality/cpk.d.ts +16 -4
- package/dist/quality/cpk.d.ts.map +1 -1
- package/dist/quality/cpk.js +16 -4
- package/dist/quality/cpk.js.map +1 -1
- package/dist/quality/dpmo.d.ts.map +1 -1
- package/dist/quality/dpmo.js +1 -61
- package/dist/quality/dpmo.js.map +1 -1
- package/dist/quality/index.d.ts +2 -1
- package/dist/quality/index.d.ts.map +1 -1
- package/dist/quality/index.js +1 -0
- package/dist/quality/index.js.map +1 -1
- package/dist/quality/oee.d.ts +12 -1
- package/dist/quality/oee.d.ts.map +1 -1
- package/dist/quality/oee.js +21 -9
- package/dist/quality/oee.js.map +1 -1
- package/dist/quality/ppk.d.ts.map +1 -1
- package/dist/quality/ppk.js +1 -16
- package/dist/quality/ppk.js.map +1 -1
- package/dist/quality/ppm.d.ts.map +1 -1
- package/dist/quality/ppm.js +1 -80
- package/dist/quality/ppm.js.map +1 -1
- package/dist/quality/types.d.ts +31 -0
- package/dist/quality/types.d.ts.map +1 -1
- package/dist/safety/fallClearance.d.ts.map +1 -1
- package/dist/safety/fallClearance.js +5 -4
- package/dist/safety/fallClearance.js.map +1 -1
- package/dist/safety/index.d.ts +2 -1
- package/dist/safety/index.d.ts.map +1 -1
- package/dist/safety/index.js +1 -0
- package/dist/safety/index.js.map +1 -1
- package/dist/safety/nioshLifting.d.ts +19 -10
- package/dist/safety/nioshLifting.d.ts.map +1 -1
- package/dist/safety/nioshLifting.js +19 -10
- package/dist/safety/nioshLifting.js.map +1 -1
- package/dist/safety/types.d.ts +19 -0
- package/dist/safety/types.d.ts.map +1 -1
- package/dist/safety/ventilationRate.d.ts +12 -0
- package/dist/safety/ventilationRate.d.ts.map +1 -0
- package/dist/safety/ventilationRate.js +71 -0
- package/dist/safety/ventilationRate.js.map +1 -0
- package/dist/utility/index.d.ts +1 -1
- package/dist/utility/index.d.ts.map +1 -1
- package/dist/utility/types.d.ts +0 -16
- package/dist/utility/types.d.ts.map +1 -1
- package/dist/utils.d.ts +3 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -4
- package/dist/utils.js.map +1 -1
- package/package.json +34 -3
- package/dist/utility/qrcode.d.ts +0 -30
- package/dist/utility/qrcode.d.ts.map +0 -1
- package/dist/utility/qrcode.js +0 -30
- package/dist/utility/qrcode.js.map +0 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Battery Domain Types
|
|
3
|
+
*/
|
|
4
|
+
export type BatteryChemistry = 'LFP' | 'NMC' | 'NCA' | 'LTO' | 'LCO' | 'LeadAcid' | 'NiMH';
|
|
5
|
+
/**
|
|
6
|
+
* Energy Density Types
|
|
7
|
+
*/
|
|
8
|
+
export interface EnergyDensityInput {
|
|
9
|
+
capacityAh: number;
|
|
10
|
+
nominalVoltage: number;
|
|
11
|
+
massKg?: number;
|
|
12
|
+
volumeL?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface EnergyDensityResult {
|
|
15
|
+
energyWh: number;
|
|
16
|
+
gravimetricWhPerKg: number | null;
|
|
17
|
+
volumetricWhPerL: number | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* C-Rate Types
|
|
21
|
+
*/
|
|
22
|
+
export type CRateMode = 'currentToRate' | 'rateToCurrent';
|
|
23
|
+
export type CRateInput = {
|
|
24
|
+
mode: 'currentToRate';
|
|
25
|
+
capacityAh: number;
|
|
26
|
+
currentA: number;
|
|
27
|
+
} | {
|
|
28
|
+
mode: 'rateToCurrent';
|
|
29
|
+
capacityAh: number;
|
|
30
|
+
cRate: number;
|
|
31
|
+
};
|
|
32
|
+
export interface CRateResult {
|
|
33
|
+
cRate: number;
|
|
34
|
+
currentA: number;
|
|
35
|
+
theoreticalTimeH: number;
|
|
36
|
+
theoreticalTimeMin: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* State of Health Types
|
|
40
|
+
*/
|
|
41
|
+
export interface StateOfHealthInput {
|
|
42
|
+
measuredCapacityAh: number;
|
|
43
|
+
ratedCapacityAh: number;
|
|
44
|
+
}
|
|
45
|
+
export type SohStatus = 'excellent' | 'good' | 'degraded' | 'poor' | 'endOfLife';
|
|
46
|
+
export interface StateOfHealthResult {
|
|
47
|
+
sohPercent: number;
|
|
48
|
+
capacityLoss: number;
|
|
49
|
+
capacityLossPercent: number;
|
|
50
|
+
status: SohStatus;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Battery Pack Config Types
|
|
54
|
+
*/
|
|
55
|
+
export interface BatteryPackConfigInput {
|
|
56
|
+
cellVoltage: number;
|
|
57
|
+
cellCapacityAh: number;
|
|
58
|
+
targetVoltage: number;
|
|
59
|
+
targetCapacityAh: number;
|
|
60
|
+
}
|
|
61
|
+
export interface BatteryPackConfigResult {
|
|
62
|
+
seriesCells: number;
|
|
63
|
+
parallelCells: number;
|
|
64
|
+
totalCells: number;
|
|
65
|
+
actualVoltage: number;
|
|
66
|
+
actualCapacityAh: number;
|
|
67
|
+
totalEnergyWh: number;
|
|
68
|
+
totalEnergyKWh: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Cycle Life Types
|
|
72
|
+
*/
|
|
73
|
+
export interface CycleLifeInput {
|
|
74
|
+
chemistry: BatteryChemistry;
|
|
75
|
+
depthOfDischarge: number;
|
|
76
|
+
temperatureC: number;
|
|
77
|
+
}
|
|
78
|
+
export interface CycleLifeResult {
|
|
79
|
+
estimatedCycles: number;
|
|
80
|
+
baseCycles: number;
|
|
81
|
+
dodFactor: number;
|
|
82
|
+
temperatureFactor: number;
|
|
83
|
+
chemistry: BatteryChemistry;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Internal Resistance Types
|
|
87
|
+
*/
|
|
88
|
+
export interface InternalResistanceInput {
|
|
89
|
+
openCircuitVoltage: number;
|
|
90
|
+
loadVoltage: number;
|
|
91
|
+
loadCurrentA: number;
|
|
92
|
+
}
|
|
93
|
+
export interface InternalResistanceResult {
|
|
94
|
+
resistanceOhm: number;
|
|
95
|
+
resistanceMilliOhm: number;
|
|
96
|
+
voltageDrop: number;
|
|
97
|
+
powerLossW: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Self-Discharge Types
|
|
101
|
+
*/
|
|
102
|
+
export interface SelfDischargeInput {
|
|
103
|
+
initialVoltage: number;
|
|
104
|
+
finalVoltage: number;
|
|
105
|
+
days: number;
|
|
106
|
+
nominalVoltage: number;
|
|
107
|
+
}
|
|
108
|
+
export interface SelfDischargeResult {
|
|
109
|
+
voltageDropPerDay: number;
|
|
110
|
+
monthlyRatePercent: number;
|
|
111
|
+
dailyRatePercent: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Thermal Runaway Types
|
|
115
|
+
*/
|
|
116
|
+
export interface ThermalRunawayInput {
|
|
117
|
+
ambientTempC: number;
|
|
118
|
+
currentA: number;
|
|
119
|
+
internalResistanceOhm: number;
|
|
120
|
+
heatTransferCoeff: number;
|
|
121
|
+
surfaceAreaM2: number;
|
|
122
|
+
runawayTempC: number;
|
|
123
|
+
}
|
|
124
|
+
export interface ThermalRunawayResult {
|
|
125
|
+
steadyStateTempC: number;
|
|
126
|
+
temperatureRiseC: number;
|
|
127
|
+
heatGenerationW: number;
|
|
128
|
+
heatDissipationW: number;
|
|
129
|
+
safetyMarginC: number;
|
|
130
|
+
isSafe: boolean;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* BMS Balancing Types
|
|
134
|
+
*/
|
|
135
|
+
export interface BmsBalancingInput {
|
|
136
|
+
cellVoltages: number[];
|
|
137
|
+
balancingCurrentMA: number;
|
|
138
|
+
cellCapacityAh: number;
|
|
139
|
+
}
|
|
140
|
+
export interface BmsBalancingResult {
|
|
141
|
+
maxVoltage: number;
|
|
142
|
+
minVoltage: number;
|
|
143
|
+
voltageDelta: number;
|
|
144
|
+
averageVoltage: number;
|
|
145
|
+
maxBalancingTimeMin: number;
|
|
146
|
+
maxBalancingTimeH: number;
|
|
147
|
+
isBalanced: boolean;
|
|
148
|
+
cellDetails: {
|
|
149
|
+
cellIndex: number;
|
|
150
|
+
voltage: number;
|
|
151
|
+
deltaFromAvg: number;
|
|
152
|
+
balancingTimeMin: number;
|
|
153
|
+
}[];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Charging Profile Types
|
|
157
|
+
*/
|
|
158
|
+
export interface ChargingProfileInput {
|
|
159
|
+
capacityAh: number;
|
|
160
|
+
chargingCurrentA: number;
|
|
161
|
+
cutoffCurrentA: number;
|
|
162
|
+
ccEndSocPercent?: number;
|
|
163
|
+
}
|
|
164
|
+
export interface ChargingProfileResult {
|
|
165
|
+
ccPhaseTimeH: number;
|
|
166
|
+
ccPhaseTimeMin: number;
|
|
167
|
+
cvPhaseTimeH: number;
|
|
168
|
+
cvPhaseTimeMin: number;
|
|
169
|
+
totalTimeH: number;
|
|
170
|
+
totalTimeMin: number;
|
|
171
|
+
ccPhaseAh: number;
|
|
172
|
+
cvPhaseAh: number;
|
|
173
|
+
averageCRate: number;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/battery/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/battery/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dilution.d.ts","sourceRoot":"","sources":["../../src/chemical/dilution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"dilution.d.ts","sourceRoot":"","sources":["../../src/chemical/dilution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2D7D"}
|
|
@@ -8,54 +8,51 @@
|
|
|
8
8
|
* @throws Error if division by zero would occur
|
|
9
9
|
*/
|
|
10
10
|
export function dilution(input) {
|
|
11
|
-
const { solveFor, c1, v1, c2, v2 } = input;
|
|
12
11
|
let resultC1;
|
|
13
12
|
let resultV1;
|
|
14
13
|
let resultC2;
|
|
15
14
|
let resultV2;
|
|
16
|
-
switch (solveFor) {
|
|
15
|
+
switch (input.solveFor) {
|
|
17
16
|
case 'c2':
|
|
18
17
|
// C2 = C1 * V1 / V2
|
|
19
|
-
if (v2 ===
|
|
18
|
+
if (input.v2 === 0) {
|
|
20
19
|
throw new Error('Cannot solve for c2: v2 must be non-zero');
|
|
21
20
|
}
|
|
22
|
-
resultC1 = c1;
|
|
23
|
-
resultV1 = v1;
|
|
24
|
-
resultV2 = v2;
|
|
25
|
-
resultC2 = (c1 * v1) / v2;
|
|
21
|
+
resultC1 = input.c1;
|
|
22
|
+
resultV1 = input.v1;
|
|
23
|
+
resultV2 = input.v2;
|
|
24
|
+
resultC2 = (input.c1 * input.v1) / input.v2;
|
|
26
25
|
break;
|
|
27
26
|
case 'v2':
|
|
28
27
|
// V2 = C1 * V1 / C2
|
|
29
|
-
if (c2 ===
|
|
28
|
+
if (input.c2 === 0) {
|
|
30
29
|
throw new Error('Cannot solve for v2: c2 must be non-zero');
|
|
31
30
|
}
|
|
32
|
-
resultC1 = c1;
|
|
33
|
-
resultV1 = v1;
|
|
34
|
-
resultC2 = c2;
|
|
35
|
-
resultV2 = (c1 * v1) / c2;
|
|
31
|
+
resultC1 = input.c1;
|
|
32
|
+
resultV1 = input.v1;
|
|
33
|
+
resultC2 = input.c2;
|
|
34
|
+
resultV2 = (input.c1 * input.v1) / input.c2;
|
|
36
35
|
break;
|
|
37
36
|
case 'c1':
|
|
38
37
|
// C1 = C2 * V2 / V1
|
|
39
|
-
if (v1 ===
|
|
38
|
+
if (input.v1 === 0) {
|
|
40
39
|
throw new Error('Cannot solve for c1: v1 must be non-zero');
|
|
41
40
|
}
|
|
42
|
-
resultV1 = v1;
|
|
43
|
-
resultC2 = c2;
|
|
44
|
-
resultV2 = v2;
|
|
45
|
-
resultC1 = (c2 * v2) / v1;
|
|
41
|
+
resultV1 = input.v1;
|
|
42
|
+
resultC2 = input.c2;
|
|
43
|
+
resultV2 = input.v2;
|
|
44
|
+
resultC1 = (input.c2 * input.v2) / input.v1;
|
|
46
45
|
break;
|
|
47
46
|
case 'v1':
|
|
48
47
|
// V1 = C2 * V2 / C1
|
|
49
|
-
if (c1 ===
|
|
48
|
+
if (input.c1 === 0) {
|
|
50
49
|
throw new Error('Cannot solve for v1: c1 must be non-zero');
|
|
51
50
|
}
|
|
52
|
-
resultC1 = c1;
|
|
53
|
-
resultC2 = c2;
|
|
54
|
-
resultV2 = v2;
|
|
55
|
-
resultV1 = (c2 * v2) / c1;
|
|
51
|
+
resultC1 = input.c1;
|
|
52
|
+
resultC2 = input.c2;
|
|
53
|
+
resultV2 = input.v2;
|
|
54
|
+
resultV1 = (input.c2 * input.v2) / input.c1;
|
|
56
55
|
break;
|
|
57
|
-
default:
|
|
58
|
-
throw new Error(`Unknown solveFor value: ${solveFor}`);
|
|
59
56
|
}
|
|
60
57
|
return {
|
|
61
58
|
c1: resultC1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dilution.js","sourceRoot":"","sources":["../../src/chemical/dilution.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,
|
|
1
|
+
{"version":3,"file":"dilution.js","sourceRoot":"","sources":["../../src/chemical/dilution.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAgB,CAAC;IAErB,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,IAAI;YACP,oBAAoB;YACpB,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM;QAER,KAAK,IAAI;YACP,oBAAoB;YACpB,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM;QAER,KAAK,IAAI;YACP,oBAAoB;YACpB,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM;QAER,KAAK,IAAI;YACP,oBAAoB;YACpB,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM;IACV,CAAC;IAED,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,QAAQ;QACZ,YAAY,EAAE,QAAQ,GAAG,QAAQ;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HeatTransferInput, HeatTransferResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Heat Transfer Calculator
|
|
4
|
+
*
|
|
5
|
+
* Supports three modes of heat transfer:
|
|
6
|
+
* - **Conduction** (Fourier's Law): Q = k × A × ΔT / L
|
|
7
|
+
* - **Convection** (Newton's Law of Cooling): Q = h × A × ΔT
|
|
8
|
+
* - **Radiation** (Stefan-Boltzmann Law): Q = ε × σ × A × (T_hot⁴ - T_cold⁴)
|
|
9
|
+
*
|
|
10
|
+
* All temperatures in °C internally converted to K for radiation.
|
|
11
|
+
*
|
|
12
|
+
* @param input - discriminated union by `mode`
|
|
13
|
+
* @returns heat transfer rate and related quantities
|
|
14
|
+
*/
|
|
15
|
+
export declare function heatTransfer(input: HeatTransferInput): HeatTransferResult;
|
|
16
|
+
//# sourceMappingURL=heatTransfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heatTransfer.d.ts","sourceRoot":"","sources":["../../src/chemical/heatTransfer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOxE;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA4DzE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Stefan-Boltzmann constant (W/(m²·K⁴))
|
|
4
|
+
*/
|
|
5
|
+
const STEFAN_BOLTZMANN = 5.670374419e-8;
|
|
6
|
+
/**
|
|
7
|
+
* Heat Transfer Calculator
|
|
8
|
+
*
|
|
9
|
+
* Supports three modes of heat transfer:
|
|
10
|
+
* - **Conduction** (Fourier's Law): Q = k × A × ΔT / L
|
|
11
|
+
* - **Convection** (Newton's Law of Cooling): Q = h × A × ΔT
|
|
12
|
+
* - **Radiation** (Stefan-Boltzmann Law): Q = ε × σ × A × (T_hot⁴ - T_cold⁴)
|
|
13
|
+
*
|
|
14
|
+
* All temperatures in °C internally converted to K for radiation.
|
|
15
|
+
*
|
|
16
|
+
* @param input - discriminated union by `mode`
|
|
17
|
+
* @returns heat transfer rate and related quantities
|
|
18
|
+
*/
|
|
19
|
+
export function heatTransfer(input) {
|
|
20
|
+
let heatRate;
|
|
21
|
+
let area;
|
|
22
|
+
let tempDifference;
|
|
23
|
+
let thermalResistance;
|
|
24
|
+
switch (input.mode) {
|
|
25
|
+
case 'conduction': {
|
|
26
|
+
const { conductivity, thickness, tempHot, tempCold } = input;
|
|
27
|
+
area = input.area;
|
|
28
|
+
if (conductivity <= 0)
|
|
29
|
+
throw new Error('Thermal conductivity must be positive');
|
|
30
|
+
if (area <= 0)
|
|
31
|
+
throw new Error('Area must be positive');
|
|
32
|
+
if (thickness <= 0)
|
|
33
|
+
throw new Error('Thickness must be positive');
|
|
34
|
+
tempDifference = tempHot - tempCold;
|
|
35
|
+
// Fourier's Law: Q = k × A × ΔT / L
|
|
36
|
+
heatRate = (conductivity * area * tempDifference) / thickness;
|
|
37
|
+
// Thermal resistance: R = L / (k × A)
|
|
38
|
+
thermalResistance = thickness / (conductivity * area);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case 'convection': {
|
|
42
|
+
const { coefficient, tempSurface, tempFluid } = input;
|
|
43
|
+
area = input.area;
|
|
44
|
+
if (coefficient <= 0)
|
|
45
|
+
throw new Error('Convection coefficient must be positive');
|
|
46
|
+
if (area <= 0)
|
|
47
|
+
throw new Error('Area must be positive');
|
|
48
|
+
tempDifference = tempSurface - tempFluid;
|
|
49
|
+
// Newton's Law of Cooling: Q = h × A × ΔT
|
|
50
|
+
heatRate = coefficient * area * tempDifference;
|
|
51
|
+
// Thermal resistance: R = 1 / (h × A)
|
|
52
|
+
thermalResistance = 1 / (coefficient * area);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case 'radiation': {
|
|
56
|
+
const { emissivity, tempHot, tempCold } = input;
|
|
57
|
+
area = input.area;
|
|
58
|
+
if (emissivity <= 0 || emissivity > 1)
|
|
59
|
+
throw new Error('Emissivity must be between 0 and 1');
|
|
60
|
+
if (area <= 0)
|
|
61
|
+
throw new Error('Area must be positive');
|
|
62
|
+
tempDifference = tempHot - tempCold;
|
|
63
|
+
// Convert to Kelvin for Stefan-Boltzmann
|
|
64
|
+
const tHotK = tempHot + 273.15;
|
|
65
|
+
const tColdK = tempCold + 273.15;
|
|
66
|
+
if (tHotK <= 0 || tColdK <= 0)
|
|
67
|
+
throw new Error('Absolute temperature must be positive');
|
|
68
|
+
// Stefan-Boltzmann Law: Q = ε × σ × A × (T_h⁴ - T_c⁴)
|
|
69
|
+
heatRate = emissivity * STEFAN_BOLTZMANN * area * (Math.pow(tHotK, 4) - Math.pow(tColdK, 4));
|
|
70
|
+
// Linearized thermal resistance (approximate): R ≈ 1 / (h_rad × A)
|
|
71
|
+
// where h_rad = ε × σ × (T_h² + T_c²) × (T_h + T_c)
|
|
72
|
+
const hRad = emissivity * STEFAN_BOLTZMANN * (tHotK * tHotK + tColdK * tColdK) * (tHotK + tColdK);
|
|
73
|
+
thermalResistance = hRad > 0 ? 1 / (hRad * area) : Infinity;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const heatFluxDensity = area > 0 ? heatRate / area : 0;
|
|
78
|
+
return {
|
|
79
|
+
heatRate: roundTo(heatRate, 4),
|
|
80
|
+
heatFluxDensity: roundTo(heatFluxDensity, 4),
|
|
81
|
+
tempDifference: roundTo(tempDifference, 2),
|
|
82
|
+
thermalResistance: roundTo(thermalResistance, 6),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=heatTransfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heatTransfer.js","sourceRoot":"","sources":["../../src/chemical/heatTransfer.ts"],"names":[],"mappings":"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"}
|
package/dist/chemical/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export type { BatchIngredient, BatchInput, ScaledIngredient, BatchResult, ConcentrationUnit, ConcentrationInput, ConcentrationResult, DilutionSolveFor, DilutionInput, DilutionResult, BufferSystem, PhInput, PhResult, ReactorShape, ReactorInput, ReactorResult, ShelfLifeInput, ShelfLifeResult, ResinType, InjectionCycleInput, InjectionCyclePhase, InjectionCycleResult, } from './types.js';
|
|
1
|
+
export type { HeatTransferMode, HeatTransferInput, HeatTransferResult, PipeMaterial, PipeFlowInput, PipeFlowResult, BatchIngredient, BatchInput, ScaledIngredient, BatchResult, ConcentrationUnit, ConcentrationInput, ConcentrationResult, DilutionSolveFor, DilutionInput, DilutionResult, BufferSystem, PhInput, PhResult, ReactorShape, ReactorInput, ReactorResult, ShelfLifeInput, ShelfLifeResult, ResinType, InjectionCycleInput, InjectionCyclePhase, InjectionCycleResult, } from './types.js';
|
|
2
|
+
export { heatTransfer } from './heatTransfer.js';
|
|
3
|
+
export { pipeFlow } from './pipeFlow.js';
|
|
2
4
|
export { batch } from './batch.js';
|
|
3
5
|
export { concentration } from './concentration.js';
|
|
4
6
|
export { dilution } from './dilution.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chemical/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,WAAW,EAEX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,OAAO,EACP,QAAQ,EAER,YAAY,EACZ,YAAY,EACZ,aAAa,EAEb,cAAc,EACd,eAAe,EAEf,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chemical/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAElB,YAAY,EACZ,aAAa,EACb,cAAc,EAEd,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,WAAW,EAEX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,OAAO,EACP,QAAQ,EAER,YAAY,EACZ,YAAY,EACZ,aAAa,EAEb,cAAc,EACd,eAAe,EAEf,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/chemical/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chemical/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chemical/index.ts"],"names":[],"mappings":"AAyCA,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PipeFlowInput, PipeFlowResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pipe Flow Calculator (Darcy-Weisbach + Swamee-Jain)
|
|
4
|
+
*
|
|
5
|
+
* Calculates pressure drop and head loss for fluid flow through pipes.
|
|
6
|
+
* Uses:
|
|
7
|
+
* - Laminar: f = 64/Re (Re < 2300)
|
|
8
|
+
* - Turbulent: Swamee-Jain explicit formula (Re > 4000)
|
|
9
|
+
* - Transitional: Linear interpolation (2300 ≤ Re ≤ 4000)
|
|
10
|
+
*
|
|
11
|
+
* Darcy-Weisbach: ΔP = f × (L/D) × (ρv²/2)
|
|
12
|
+
*
|
|
13
|
+
* @param input - flow rate, pipe geometry, fluid properties
|
|
14
|
+
* @returns pressure drop, velocity, Reynolds number, flow regime
|
|
15
|
+
*/
|
|
16
|
+
export declare function pipeFlow(input: PipeFlowInput): PipeFlowResult;
|
|
17
|
+
//# sourceMappingURL=pipeFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeFlow.d.ts","sourceRoot":"","sources":["../../src/chemical/pipeFlow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAiC9E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAoE7D"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pipe roughness values in mm
|
|
4
|
+
* Source: Engineering Toolbox, Pipe Flow Software, ASTM
|
|
5
|
+
*/
|
|
6
|
+
const PIPE_ROUGHNESS = {
|
|
7
|
+
commercialSteel: 0.045,
|
|
8
|
+
stainlessSteel: 0.015,
|
|
9
|
+
castIron: 0.26,
|
|
10
|
+
copper: 0.0015,
|
|
11
|
+
pvc: 0.0015,
|
|
12
|
+
concrete: 1.0,
|
|
13
|
+
galvanizedSteel: 0.15,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Swamee-Jain explicit friction factor for turbulent flow
|
|
17
|
+
*
|
|
18
|
+
* f = 0.25 / [log10(ε/(3.7D) + 5.74/Re^0.9)]²
|
|
19
|
+
*
|
|
20
|
+
* Valid for: 5000 ≤ Re ≤ 10⁸, 10⁻⁶ ≤ ε/D ≤ 10⁻²
|
|
21
|
+
* Accuracy: ±1% vs Colebrook-White
|
|
22
|
+
*
|
|
23
|
+
* Reference: Swamee & Jain (1976), J. Hydraulics Division, ASCE
|
|
24
|
+
*/
|
|
25
|
+
function swameeJainFriction(Re, epsilonM, diameterM) {
|
|
26
|
+
const relativeRoughness = epsilonM / diameterM;
|
|
27
|
+
const term = relativeRoughness / 3.7 + 5.74 / Math.pow(Re, 0.9);
|
|
28
|
+
const logTerm = Math.log10(term);
|
|
29
|
+
return 0.25 / (logTerm * logTerm);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Pipe Flow Calculator (Darcy-Weisbach + Swamee-Jain)
|
|
33
|
+
*
|
|
34
|
+
* Calculates pressure drop and head loss for fluid flow through pipes.
|
|
35
|
+
* Uses:
|
|
36
|
+
* - Laminar: f = 64/Re (Re < 2300)
|
|
37
|
+
* - Turbulent: Swamee-Jain explicit formula (Re > 4000)
|
|
38
|
+
* - Transitional: Linear interpolation (2300 ≤ Re ≤ 4000)
|
|
39
|
+
*
|
|
40
|
+
* Darcy-Weisbach: ΔP = f × (L/D) × (ρv²/2)
|
|
41
|
+
*
|
|
42
|
+
* @param input - flow rate, pipe geometry, fluid properties
|
|
43
|
+
* @returns pressure drop, velocity, Reynolds number, flow regime
|
|
44
|
+
*/
|
|
45
|
+
export function pipeFlow(input) {
|
|
46
|
+
const { flowRate, pipeDiameter, pipeLength, pipeMaterial, fluidDensity, fluidViscosity, customRoughness } = input;
|
|
47
|
+
if (flowRate <= 0)
|
|
48
|
+
throw new Error('Flow rate must be positive');
|
|
49
|
+
if (pipeDiameter <= 0)
|
|
50
|
+
throw new Error('Pipe diameter must be positive');
|
|
51
|
+
if (pipeLength <= 0)
|
|
52
|
+
throw new Error('Pipe length must be positive');
|
|
53
|
+
if (fluidDensity <= 0)
|
|
54
|
+
throw new Error('Fluid density must be positive');
|
|
55
|
+
if (fluidViscosity <= 0)
|
|
56
|
+
throw new Error('Fluid viscosity must be positive');
|
|
57
|
+
// Get pipe roughness
|
|
58
|
+
let roughnessMm;
|
|
59
|
+
if (pipeMaterial === 'custom') {
|
|
60
|
+
if (customRoughness == null || customRoughness < 0) {
|
|
61
|
+
throw new Error('Custom roughness must be provided and non-negative');
|
|
62
|
+
}
|
|
63
|
+
roughnessMm = customRoughness;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
roughnessMm = PIPE_ROUGHNESS[pipeMaterial];
|
|
67
|
+
}
|
|
68
|
+
// Unit conversions
|
|
69
|
+
const diameterM = pipeDiameter / 1000; // mm → m
|
|
70
|
+
const epsilonM = roughnessMm / 1000; // mm → m
|
|
71
|
+
const flowRateM3s = flowRate / 60000; // L/min → m³/s
|
|
72
|
+
// Velocity: v = Q / A = 4Q / (πD²)
|
|
73
|
+
const area = (Math.PI * diameterM * diameterM) / 4;
|
|
74
|
+
const velocity = flowRateM3s / area;
|
|
75
|
+
// Reynolds number: Re = ρvD / μ
|
|
76
|
+
const Re = (fluidDensity * velocity * diameterM) / fluidViscosity;
|
|
77
|
+
// Determine flow regime and friction factor
|
|
78
|
+
let frictionFactor;
|
|
79
|
+
let flowRegime;
|
|
80
|
+
if (Re < 2300) {
|
|
81
|
+
flowRegime = 'laminar';
|
|
82
|
+
frictionFactor = 64 / Re;
|
|
83
|
+
}
|
|
84
|
+
else if (Re > 4000) {
|
|
85
|
+
flowRegime = 'turbulent';
|
|
86
|
+
frictionFactor = swameeJainFriction(Re, epsilonM, diameterM);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Transitional: linear interpolation
|
|
90
|
+
flowRegime = 'transitional';
|
|
91
|
+
const fLam = 64 / 2300;
|
|
92
|
+
const fTurb = swameeJainFriction(4000, epsilonM, diameterM);
|
|
93
|
+
const t = (Re - 2300) / (4000 - 2300);
|
|
94
|
+
frictionFactor = fLam + t * (fTurb - fLam);
|
|
95
|
+
}
|
|
96
|
+
// Darcy-Weisbach: ΔP = f × (L/D) × (ρv²/2)
|
|
97
|
+
const pressureDrop = frictionFactor * (pipeLength / diameterM) * (fluidDensity * velocity * velocity / 2);
|
|
98
|
+
// Head loss: h_f = ΔP / (ρg)
|
|
99
|
+
const g = 9.81;
|
|
100
|
+
const headLoss = pressureDrop / (fluidDensity * g);
|
|
101
|
+
return {
|
|
102
|
+
velocity: roundTo(velocity, 4),
|
|
103
|
+
reynoldsNumber: roundTo(Re, 0),
|
|
104
|
+
flowRegime,
|
|
105
|
+
frictionFactor: roundTo(frictionFactor, 6),
|
|
106
|
+
pressureDrop: roundTo(pressureDrop, 2),
|
|
107
|
+
pressureDropKpa: roundTo(pressureDrop / 1000, 4),
|
|
108
|
+
pressureDropBar: roundTo(pressureDrop / 100000, 6),
|
|
109
|
+
headLoss: roundTo(headLoss, 4),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=pipeFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeFlow.js","sourceRoot":"","sources":["../../src/chemical/pipeFlow.ts"],"names":[],"mappings":"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"}
|
package/dist/chemical/reactor.js
CHANGED
|
@@ -16,13 +16,13 @@ import { roundTo } from '../utils.js';
|
|
|
16
16
|
* @returns Reactor volumes and surface area
|
|
17
17
|
*/
|
|
18
18
|
export function reactor(input) {
|
|
19
|
-
const { shape, diameter,
|
|
19
|
+
const { shape, diameter, fillRatio } = input;
|
|
20
20
|
const radius = diameter / 2;
|
|
21
21
|
let totalVolume;
|
|
22
22
|
let surfaceArea;
|
|
23
23
|
if (shape === 'cylindrical') {
|
|
24
24
|
// Cylindrical reactor
|
|
25
|
-
const h = height;
|
|
25
|
+
const h = input.height;
|
|
26
26
|
// V = PI * r^2 * h
|
|
27
27
|
totalVolume = Math.PI * radius * radius * h;
|
|
28
28
|
// Surface Area = 2 * PI * r^2 (ends) + 2 * PI * r * h (lateral)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactor.js","sourceRoot":"","sources":["../../src/chemical/reactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"reactor.js","sourceRoot":"","sources":["../../src/chemical/reactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7C,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC5B,IAAI,WAAmB,CAAC;IACxB,IAAI,WAAmB,CAAC;IAExB,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,sBAAsB;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,mBAAmB;QACnB,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;QAC5C,gEAAgE;QAChE,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,uBAAuB;QACvB,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAC3D,8BAA8B;QAC9B,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9C,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;IAC9C,MAAM,iBAAiB,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAC9D,MAAM,mBAAmB,GAAG,aAAa,GAAG,IAAI,CAAC;IACjD,MAAM,oBAAoB,GAAG,WAAW,GAAG,WAAW,CAAC;IAEvD,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACpD,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;GAEG"}
|