measur-tools-suite 1.2.1-beta.7 → 1.2.1-beta.9
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/.agents/handoffs/compressed-air-desktop-migration.md +336 -0
- package/bin/client.d.ts +4 -0
- package/bin/client.js +1 -1
- package/bin/client.wasm +0 -0
- package/bin/package.json +1 -1
- package/bin/ts_def_modules/binding/registered_vectors.d.ts +27 -0
- package/bin/ts_def_modules/compressedAir/assessment/compressor_eem.d.ts +53 -0
- package/bin/ts_def_modules/compressedAir/assessment/compressor_performance_points.d.ts +302 -0
- package/bin/ts_def_modules/compressedAir/assessment/compressor_system_profile.d.ts +280 -0
- package/build-wasm/Makefile +120 -0
- package/build-wasm/bin/client.js +1 -1
- package/build-wasm/bin/client.wasm +0 -0
- package/docs/dependencies/mathjax-config.js +7 -0
- package/docs/dox-content/calculators/compressedAir/assessment/compressor_catalog_units.dox +1 -1
- package/docs/dox-content/calculators/compressedAir/assessment/compressor_eem.dox +43 -0
- package/docs/dox-content/calculators/compressedAir/assessment/compressor_performance_points.dox +212 -0
- package/docs/dox-content/calculators/compressedAir/assessment/compressor_system_profile.dox +194 -0
- package/docs/dox-content/calculators/compressedAir/assessment/desktop_migration_boundaries.dox +31 -0
- package/docs/dox-content/calculators/compressedAir/assessment/modulation_without_unload.dox +8 -3
- package/docs/dox-content/calculators/compressedAir/assessment/overview.dox +2 -2
- package/package.json +1 -1
- package/ts_def/client.d.ts +4 -0
- package/ts_def/ts_def_modules/binding/registered_vectors.d.ts +27 -0
- package/ts_def/ts_def_modules/compressedAir/assessment/compressor_eem.d.ts +53 -0
- package/ts_def/ts_def_modules/compressedAir/assessment/compressor_performance_points.d.ts +302 -0
- package/ts_def/ts_def_modules/compressedAir/assessment/compressor_system_profile.d.ts +280 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# Compressed Air Desktop Migration Handoff
|
|
2
|
+
|
|
3
|
+
## Target Module
|
|
4
|
+
|
|
5
|
+
- Domain/path: `compressedAir/assessment`
|
|
6
|
+
- Logical modules:
|
|
7
|
+
- `compressor_performance_points`
|
|
8
|
+
- `compressor_system_profile`
|
|
9
|
+
- extended `compressor_eem`
|
|
10
|
+
- Desktop source path: `/Users/txr/dev/AMO-Tools-Desktop/src/app/compressed-air-assessment/calculations`
|
|
11
|
+
- Suite public API path:
|
|
12
|
+
- C++: `include/compressedAir/assessment/`
|
|
13
|
+
- WASM declarations: `ts_def/ts_def_modules/compressedAir/assessment/`
|
|
14
|
+
- Docs: `docs/dox-content/calculators/compressedAir/assessment/`
|
|
15
|
+
|
|
16
|
+
## Migration Boundary
|
|
17
|
+
|
|
18
|
+
- Move reusable calculation kernels into Suite.
|
|
19
|
+
- Keep Desktop responsible for:
|
|
20
|
+
- metric conversion before calling Suite and display-unit conversion after results
|
|
21
|
+
- form validation and display flags
|
|
22
|
+
- modification ordering, labels, notes, modal state, and UI-only flags
|
|
23
|
+
- assessment persistence and report shaping
|
|
24
|
+
- CO2 service integration and emission-factor calculations
|
|
25
|
+
- mapping Desktop numeric IDs and string modes to Suite enums
|
|
26
|
+
|
|
27
|
+
## Old Desktop Files And Suite Replacements
|
|
28
|
+
|
|
29
|
+
- `calculations/performancePoints/CompressorPerformancePointsClass.ts`
|
|
30
|
+
- Replace default point generation with `generatePerformancePoints`.
|
|
31
|
+
- Replace sequencer adjustment with `adjustPerformancePointsForSequencer`.
|
|
32
|
+
- Replace pressure reduction adjustment with `reduceSystemPressurePerformancePoints`.
|
|
33
|
+
- Replace cascading set-point adjustment with `adjustCascadingSetPointPerformancePoints`.
|
|
34
|
+
- `calculations/performancePoints/*PerformancePoint.ts`
|
|
35
|
+
- Replace formulas with `compressor_performance_points` helpers and `generatePerformancePoints`.
|
|
36
|
+
- Keep only UI display metadata if still needed.
|
|
37
|
+
- `calculations/performancePoints/performancePointHelpers.ts`
|
|
38
|
+
- Replace with:
|
|
39
|
+
- `calculatePressureAdjustedAirflow`
|
|
40
|
+
- `calculatePressureAdjustedPower`
|
|
41
|
+
- `calculateNoLoadPower`
|
|
42
|
+
- `calculateNoLoadPowerWithoutUnloading`
|
|
43
|
+
- `calculateUnloadPointPower`
|
|
44
|
+
- `calculateUnloadPointAirflow`
|
|
45
|
+
- `calculateUnloadPointDischargePressure`
|
|
46
|
+
- `calculateCentrifugalUnloadPointAirflow`
|
|
47
|
+
- `calculateRatedSpecificPower`
|
|
48
|
+
- `calculateRatedIsentropicEfficiency`
|
|
49
|
+
- `calculations/CompressorInventoryItemClass.ts`
|
|
50
|
+
- Replace performance-point mutation methods with Suite point-generation functions.
|
|
51
|
+
- Replace rated metrics with `calculateRatedSpecificPower` and `calculateRatedIsentropicEfficiency`.
|
|
52
|
+
- Keep display flags, persistence conversion, inventory item identity, colors, descriptions, and connected-inventory behavior in Desktop.
|
|
53
|
+
- `calculations/CompressedAirBaselineDayTypeProfileSummary.ts`
|
|
54
|
+
- Replace compressor profile row calculations with `calculateBaselineProfile`.
|
|
55
|
+
- Keep aggregation into Desktop view models and report state in Desktop.
|
|
56
|
+
- `calculations/CompressedAirProfileSummary.ts`
|
|
57
|
+
- Replace calculation logic with `CompressorProfileRow` mapping where possible.
|
|
58
|
+
- Keep presentation structure if Angular components still consume it.
|
|
59
|
+
- `calculations/modifications/energyEfficiencyMeasures/FlowReallocationResults.ts`
|
|
60
|
+
- Replace flow reallocation, load sharing, base trim, reduce-runtime, and zero-flow shutdown calculations with `reallocateProfileFlow`.
|
|
61
|
+
- Replace total rows with `calculateProfileTotals`.
|
|
62
|
+
- Keep modification ordering and adjusted profile view-model mapping in Desktop.
|
|
63
|
+
- `calculations/modifications/CompressedAirEemSavingsResult.ts`
|
|
64
|
+
- Replace day-type energy/cost/payback math with `calculateProfileSavings`.
|
|
65
|
+
- Keep CO2/emissions enrichment and report-specific result shape in Desktop.
|
|
66
|
+
- `calculations/modifications/energyEfficiencyMeasures/compressorsAdjustment.ts`
|
|
67
|
+
- Replace `calculateReducedAirFlow` with `calculatePressureReducedAirflow` or `pressureReducedAirflow`.
|
|
68
|
+
- Keep order reshaping if it is only a Desktop display concern.
|
|
69
|
+
- `ReduceAirLeaksResults.ts`, `ImproveEndUseEfficiencyResults.ts`, `ReduceSystemAirPressureResults.ts`, `AdjustCascadingSetPointsSavingsResults.ts`, `UseAutomaticSequencerResults.ts`, `ReplaceCompressorResults.ts`
|
|
70
|
+
- Replace reusable scalar/profile transforms with Suite EEM and profile functions.
|
|
71
|
+
- Keep UI labels, selected modifications, adjusted compressor copies, replacement mapping, and report shaping in Desktop.
|
|
72
|
+
- `ResultingSystemProfileValidation.ts`
|
|
73
|
+
- Keep in Desktop unless it becomes a pure numerical validation rule with no form/report dependency.
|
|
74
|
+
|
|
75
|
+
## Suite Functions, Inputs, Outputs, And Units
|
|
76
|
+
|
|
77
|
+
### Performance Points
|
|
78
|
+
|
|
79
|
+
- `generatePerformancePoints(input: CompressorPerformancePointInput): CompressorPerformancePoints`
|
|
80
|
+
- Inputs: nameplate, controls, design details, centrifugal endpoints, existing point values/default flags, atmospheric pressure.
|
|
81
|
+
- Outputs: full-load, max-full-flow, mid-turndown, turndown, unload, no-load, blowoff points.
|
|
82
|
+
- Units: pressure psig/psia, airflow acfm, power kW, motor size hp, percentages as percent, flags dimensionless boolean.
|
|
83
|
+
- `adjustPerformancePointsForSequencer(input: SequencerSetPointInput): CompressorPerformancePoints`
|
|
84
|
+
- Inputs: compressor point input, target pressure psig, variance psig.
|
|
85
|
+
- Outputs: regenerated point bundle.
|
|
86
|
+
- `reduceSystemPressurePerformancePoints(input: PressureReductionPointInput): CompressorPerformancePoints`
|
|
87
|
+
- Inputs: compressor point input, pressure reduction psig.
|
|
88
|
+
- Outputs: regenerated point bundle.
|
|
89
|
+
- `adjustCascadingSetPointPerformancePoints(input: CascadingSetPointInput): CompressorPerformancePoints`
|
|
90
|
+
- Inputs: compressor point input, adjusted full-load pressure psig, adjusted max-full-flow pressure psig.
|
|
91
|
+
- Outputs: regenerated point bundle.
|
|
92
|
+
- Scalar helpers:
|
|
93
|
+
- `calculatePressureAdjustedAirflow(capacityAcfm, pointPressurePsig, ratedPressurePsig, atmosphericPressurePsia): number` returns acfm.
|
|
94
|
+
- `calculatePressureAdjustedPower(compressorType, inletPressurePsia, pointPressurePsig, ratedFullLoadPressurePsig, packagePowerKw, atmosphericPressurePsia): number` returns kW.
|
|
95
|
+
- `calculateNoLoadPower(noLoadPowerULPercent, packagePowerKw, designEfficiencyPercent): number` returns kW.
|
|
96
|
+
- `calculateNoLoadPowerWithoutUnloading(noLoadPowerFMPercent, fullLoadPowerKw): number` returns kW.
|
|
97
|
+
- `calculateUnloadPointPower(noLoadPowerFMPercent, unloadPointCapacityPercent, exponent, maxFullFlowPowerKw): number` returns kW.
|
|
98
|
+
- `calculateUnloadPointAirflow(fullLoadAirflowAcfm, unloadPointCapacityPercent): number` returns acfm.
|
|
99
|
+
- `calculateUnloadPointDischargePressure(maxFullFlowPressurePsig, modulatingPressureRangePsig, fullLoadAirflowAcfm, unloadPointAirflowAcfm): number` returns psig.
|
|
100
|
+
- `calculateCentrifugalUnloadPointAirflow(centrifugal, dischargePressurePsig): number` returns acfm.
|
|
101
|
+
- `calculateRatedSpecificPower(totalPackageInputPowerKw, fullLoadRatedCapacityAcfm): number` returns kW/100 acfm.
|
|
102
|
+
- `calculateRatedIsentropicEfficiency(ratedSpecificPower, fullLoadOperatingPressurePsig): number` returns percent.
|
|
103
|
+
|
|
104
|
+
### System Profile
|
|
105
|
+
|
|
106
|
+
- `calculateBaselineProfile(compressors, profileRows, options): CompressorProfileRowV`
|
|
107
|
+
- Inputs: `CompressorProfileCompressorV`, `CompressorProfileRowV`, `CompressorProfileOptions`.
|
|
108
|
+
- Outputs: registered vector of calculated compressor rows. Caller must call `delete()`.
|
|
109
|
+
- `calculateProfileTotals(compressors, profileRows, intervalHours): CompressorProfileTotalV`
|
|
110
|
+
- Inputs: compressor vector, calculated row vector, interval duration hours.
|
|
111
|
+
- Outputs: registered vector of total rows. Caller must call `delete()`.
|
|
112
|
+
- `reallocateProfileFlow(compressors, previousProfileRows, demandRows, options, runtimeStates, trimSelections): CompressorProfileRowV`
|
|
113
|
+
- Inputs: compressor vector, prior row vector, demand total vector, options, runtime state vector, trim selection vector.
|
|
114
|
+
- Outputs: registered vector of adjusted compressor rows. Caller must call `delete()`.
|
|
115
|
+
- `calculateProfileSavings(baselineRows, adjustedRows, input): CompressorProfileSavingsResult`
|
|
116
|
+
- Inputs: baseline row vector, adjusted row vector, electricity cost dollars/kWh, interval hours, operating days, auxiliary energy kWh/year, implementation cost dollars, salvage dollars.
|
|
117
|
+
- Outputs: annual baseline/adjusted energy kWh, annual baseline/adjusted cost dollars, energy savings kWh, cost savings dollars, percent savings, payback months.
|
|
118
|
+
- `calculateCompressorProfileRow(compressor, inputBasis, inputValue, options, powerFactor, amps, volts): CompressorProfileRow`
|
|
119
|
+
- Inputs: one compressor definition, input basis, numeric input value in basis units, options, electrical values.
|
|
120
|
+
- Outputs: one calculated profile row.
|
|
121
|
+
- `calculatePressureReducedAirflow(useAirflowAcfm, adjustedFullLoadPressurePsig, altitudePressurePsia, originalFullLoadPressurePsig): number`
|
|
122
|
+
- Output: pressure-reduced airflow acfm.
|
|
123
|
+
|
|
124
|
+
### EEM Helpers
|
|
125
|
+
|
|
126
|
+
- Existing Suite helpers:
|
|
127
|
+
- `reduceAirLeaks`
|
|
128
|
+
- `improveEndUseEfficiency`
|
|
129
|
+
- `reduceSystemAirPressure`
|
|
130
|
+
- `adjustCascadingSetPoint`
|
|
131
|
+
- `pressureReductionSaving`
|
|
132
|
+
- `adjustedPower`
|
|
133
|
+
- New reusable transforms:
|
|
134
|
+
- `pressureReducedAirflow(useAirflowAcfm, adjustedFullLoadPressurePsig, altitudePressurePsia, originalFullLoadPressurePsig, atmosphericPressurePsia): number`
|
|
135
|
+
- `addReceiverVolume(currentReceiverVolumeFt3, addedReceiverVolumeFt3): ReceiverVolumeResult`
|
|
136
|
+
- `automaticSequencerSetPoints(targetPressurePsig, variancePsig): AutomaticSequencerSetPointResult`
|
|
137
|
+
|
|
138
|
+
## Enum And ID Mapping
|
|
139
|
+
|
|
140
|
+
Desktop compressor type IDs from `inventoryOptions.ts`:
|
|
141
|
+
|
|
142
|
+
- `1` Single stage lubricant-injected rotary screw -> `CompressorType.Screw`, `CompressorStage.Single`, `CompressorLubricant.Injected`
|
|
143
|
+
- `2` Two stage lubricant-injected rotary screw -> `CompressorType.Screw`, `CompressorStage.Two`, `CompressorLubricant.Injected`
|
|
144
|
+
- `3` Two stage lubricant-free rotary screw -> `CompressorType.Screw`, `CompressorStage.Two`, `CompressorLubricant.Free`
|
|
145
|
+
- `4` Single stage reciprocating -> `CompressorType.Reciprocating`, `CompressorStage.Single`, `CompressorLubricant.None`
|
|
146
|
+
- `5` Two stage reciprocating -> `CompressorType.Reciprocating`, `CompressorStage.Two`, `CompressorLubricant.None`
|
|
147
|
+
- `6` Multiple stage centrifugal -> `CompressorType.Centrifugal`, `CompressorStage.Multiple`, `CompressorLubricant.None`
|
|
148
|
+
|
|
149
|
+
Desktop control IDs from `inventoryOptions.ts`:
|
|
150
|
+
|
|
151
|
+
- `1` Inlet modulation without unloading -> `CompressorControl.ModulationWithoutUnload`
|
|
152
|
+
- `2` Inlet modulation with unloading -> `CompressorControl.ModulationUnload`
|
|
153
|
+
- `3` Variable displacement with unloading -> `CompressorControl.VariableDisplacementUnload`
|
|
154
|
+
- `4` Load/unload -> `CompressorControl.LoadUnload`
|
|
155
|
+
- `5` Multi-step unloading -> `CompressorControl.MultiStepUnloading`
|
|
156
|
+
- `6` Start/Stop -> `CompressorControl.StartStop`
|
|
157
|
+
- `7` Inlet butterfly modulation with blowoff -> `CompressorControl.BlowOff`
|
|
158
|
+
- `8` Inlet butterfly modulation with unloading -> `CompressorControl.ModulationUnload`
|
|
159
|
+
- `9` Inlet guide vane modulation with blowoff -> `CompressorControl.BlowOff`
|
|
160
|
+
- `10` Inlet guide vane modulation with unloading -> `CompressorControl.ModulationUnload`
|
|
161
|
+
- `11` VFD -> `CompressorControl.Vfd`
|
|
162
|
+
|
|
163
|
+
Desktop profile input basis IDs from `SuiteApiHelperService.getComputeFromEnum`:
|
|
164
|
+
|
|
165
|
+
- `0` -> `CompressorInputBasis.PowerFraction`
|
|
166
|
+
- `1` -> `CompressorInputBasis.CapacityFraction`
|
|
167
|
+
- `2` -> `CompressorInputBasis.MeasuredPower`
|
|
168
|
+
- `3` -> `CompressorInputBasis.MeasuredCapacity`
|
|
169
|
+
- `4` -> `CompressorInputBasis.Electrical`
|
|
170
|
+
|
|
171
|
+
Desktop multi-compressor strings:
|
|
172
|
+
|
|
173
|
+
- `cascading` -> `CompressorSystemControlMode.Cascading`
|
|
174
|
+
- `targetPressureSequencer` -> `CompressorSystemControlMode.TargetPressureSequencer`
|
|
175
|
+
- `loadSharing` -> `CompressorSystemControlMode.LoadSharing`
|
|
176
|
+
- `baseTrim` -> `CompressorSystemControlMode.BaseTrim`
|
|
177
|
+
- Isentropic-efficiency ordering, when used as an explicit system strategy, maps to `CompressorSystemControlMode.IsentropicEfficiency`.
|
|
178
|
+
|
|
179
|
+
## Sample Before And After Call Patterns
|
|
180
|
+
|
|
181
|
+
### Performance Point Generation
|
|
182
|
+
|
|
183
|
+
Before:
|
|
184
|
+
|
|
185
|
+
```ts
|
|
186
|
+
const points = new CompressorPerformancePointsClass(item.performancePoints);
|
|
187
|
+
points.updatePerformancePoints(nameplateData, centrifugalSpecifics, designDetails, compressorControls, atmosphericPressure, settings);
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
After:
|
|
191
|
+
|
|
192
|
+
```ts
|
|
193
|
+
const points = suite.generatePerformancePoints({
|
|
194
|
+
nameplate,
|
|
195
|
+
controls,
|
|
196
|
+
design,
|
|
197
|
+
centrifugal,
|
|
198
|
+
points: existingPointsWithDefaultFlags,
|
|
199
|
+
atmosphericPressurePsia: atmosphericPressure,
|
|
200
|
+
});
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Baseline Profile Calculation
|
|
204
|
+
|
|
205
|
+
After:
|
|
206
|
+
|
|
207
|
+
```ts
|
|
208
|
+
const compressors = new suite.CompressorProfileCompressorV();
|
|
209
|
+
const profileRows = new suite.CompressorProfileRowV();
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
compressors.push_back(mappedCompressor);
|
|
213
|
+
profileRows.push_back(mappedProfileRow);
|
|
214
|
+
|
|
215
|
+
const rows = suite.calculateBaselineProfile(compressors, profileRows, options);
|
|
216
|
+
try {
|
|
217
|
+
const row = rows.get(0);
|
|
218
|
+
// map row.powerKw, row.airflowAcfm, row.powerFraction, row.airflowFraction back to Desktop view model
|
|
219
|
+
} finally {
|
|
220
|
+
rows.delete();
|
|
221
|
+
}
|
|
222
|
+
} finally {
|
|
223
|
+
profileRows.delete();
|
|
224
|
+
compressors.delete();
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Flow Reallocation
|
|
229
|
+
|
|
230
|
+
After:
|
|
231
|
+
|
|
232
|
+
```ts
|
|
233
|
+
const adjustedRows = suite.reallocateProfileFlow(
|
|
234
|
+
compressors,
|
|
235
|
+
previousRows,
|
|
236
|
+
demandRows,
|
|
237
|
+
options,
|
|
238
|
+
runtimeStates,
|
|
239
|
+
trimSelections
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
try {
|
|
243
|
+
// read adjustedRows.get(i), then map back to ProfileSummaryData
|
|
244
|
+
} finally {
|
|
245
|
+
adjustedRows.delete();
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### EEM Savings
|
|
250
|
+
|
|
251
|
+
After:
|
|
252
|
+
|
|
253
|
+
```ts
|
|
254
|
+
const savings = suite.calculateProfileSavings(baselineRows, adjustedRows, {
|
|
255
|
+
dayTypeId,
|
|
256
|
+
electricityCostPerKwh: costKwh,
|
|
257
|
+
intervalHours: summaryDataInterval,
|
|
258
|
+
operatingDays,
|
|
259
|
+
auxiliaryEnergyKwh,
|
|
260
|
+
implementationCost,
|
|
261
|
+
salvageValue,
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// Desktop can add CO2 and report-only fields after this result returns.
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Characterization Fixtures And Expected Outputs
|
|
268
|
+
|
|
269
|
+
Suite characterization tests added for parity:
|
|
270
|
+
|
|
271
|
+
- `tests/cpp/compressedAir/assessment/compressor_performance_points.unit.cpp`
|
|
272
|
+
- Screw modulation/unload default points:
|
|
273
|
+
- full load: 100 psig, 1048 acfm, 166.5 kW
|
|
274
|
+
- max full flow: 110 psig, 1040 acfm, 175.6 kW
|
|
275
|
+
- unload: 110.5 psig, 943 acfm, 170.3 kW
|
|
276
|
+
- no load: 15 psig, 0 acfm, 41.6 kW
|
|
277
|
+
- VFD defaults:
|
|
278
|
+
- mid turndown: 102.4 psig, 605 acfm, 115 kW
|
|
279
|
+
- turndown: 104.8 psig, 202 acfm, 55.8 kW
|
|
280
|
+
- `tests/cpp/compressedAir/assessment/compressor_system_profile.unit.cpp`
|
|
281
|
+
- Baseline measured capacity: 500 acfm -> 75 kW
|
|
282
|
+
- Cascading reallocation: 1200 acfm -> 1000/100 kW and 200/42 kW
|
|
283
|
+
- Load sharing: 750 acfm -> compressor A 750/87.5 kW and compressor B off
|
|
284
|
+
- Savings: 1420 baseline kWh, 875 adjusted kWh, 545 kWh savings, $54.50 savings, 22.0183 months payback
|
|
285
|
+
- WASM tests:
|
|
286
|
+
- `tests/wasm-mocha/compressedAir/assessment/wasm_compressor_performance_points.test.ts`
|
|
287
|
+
- `tests/wasm-mocha/compressedAir/assessment/wasm_compressor_system_profile.test.ts`
|
|
288
|
+
- `tests/wasm-mocha/compressedAir/assessment/wasm_compressor_eem.test.ts`
|
|
289
|
+
|
|
290
|
+
Desktop migration should add Angular-side fixtures around representative persisted assessments before deleting old calculation classes.
|
|
291
|
+
|
|
292
|
+
## Desktop Deletion And Replacement Checklist
|
|
293
|
+
|
|
294
|
+
- [ ] Add mapper helpers from Desktop compressor inventory/profile models to Suite passive objects.
|
|
295
|
+
- [ ] Add mapper helpers from Suite `CompressorProfileRow` and `CompressorProfileTotal` back to Desktop view models.
|
|
296
|
+
- [ ] Add vector helper constructors/deletion wrappers for profile vectors.
|
|
297
|
+
- [ ] Replace `CompressorPerformancePointsClass` update methods with Suite functions.
|
|
298
|
+
- [ ] Replace performance point class formulas with Suite calls or remove classes if only calculation wrappers remain.
|
|
299
|
+
- [ ] Replace `FlowReallocationResults.reallocateFlow`, `shareLoad`, `setBaseTrimOrdering`, and combination logic with `reallocateProfileFlow`.
|
|
300
|
+
- [ ] Replace baseline profile row calculation with `calculateBaselineProfile`.
|
|
301
|
+
- [ ] Replace day-type total calculation with `calculateProfileTotals`.
|
|
302
|
+
- [ ] Replace EEM savings rollup with `calculateProfileSavings`, then layer Desktop CO2/report fields.
|
|
303
|
+
- [ ] Replace reduced airflow, receiver-volume, sequencer set-point helpers with Suite EEM helpers.
|
|
304
|
+
- [ ] Keep Desktop validation/report tests green after each replacement step.
|
|
305
|
+
- [ ] Delete obsolete calculation files only after the mapped Suite path is covered by Desktop tests.
|
|
306
|
+
|
|
307
|
+
## Desktop Validation Commands
|
|
308
|
+
|
|
309
|
+
Run from `/Users/txr/dev/AMO-Tools-Desktop` after updating package output and Desktop adapters:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
npm run lint
|
|
313
|
+
npm run build
|
|
314
|
+
npx ng test --watch=false --browsers=ChromeHeadless
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Also run the targeted compressed-air specs added during migration. If the Desktop repo uses a different CI command set, run the same commands configured for the open PR.
|
|
318
|
+
|
|
319
|
+
## Suite Validation Status
|
|
320
|
+
|
|
321
|
+
- C++ validation passed during Suite implementation:
|
|
322
|
+
- `cmake -S . -B build-cpp`
|
|
323
|
+
- `cmake --build build-cpp`
|
|
324
|
+
- `./build-cpp/bin/cpp_tests`
|
|
325
|
+
- TypeScript declaration validation passed:
|
|
326
|
+
- `./node_modules/.bin/tsc --noEmit`
|
|
327
|
+
- Documentation validation was attempted:
|
|
328
|
+
- `doxygen Doxyfile` exited 0, but reported existing CLANG option warnings, a BibTeX `bib*.bbl` error message, and unrelated undocumented-parameter warnings outside compressed air.
|
|
329
|
+
- Environment limit observed:
|
|
330
|
+
- `emcmake` and `emmake` are not available in this shell, so Suite WASM rebuild still needs to run in an Emscripten-enabled environment.
|
|
331
|
+
- `npm run tests` was attempted and failed because the local `bin/client.js` and WASM binary do not include the new assessment bindings. The failure mode was missing compressor assessment constructors/functions, including previously added compressor assessment bindings.
|
|
332
|
+
|
|
333
|
+
## Open Questions Or Blockers
|
|
334
|
+
|
|
335
|
+
- Desktop should decide whether any remaining calculations are purely UI/report shaping or should be proposed for a later Suite migration.
|
|
336
|
+
- CO2 emissions remain Desktop-owned until Suite APIs accept emission-factor inputs.
|
package/bin/client.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export * from "./ts_def_modules/compressedAir/receiver_tank";
|
|
|
12
12
|
export * from "./ts_def_modules/compressedAir/assessment/compressor";
|
|
13
13
|
export * from "./ts_def_modules/compressedAir/assessment/compressor_catalog";
|
|
14
14
|
export * from "./ts_def_modules/compressedAir/assessment/compressor_eem";
|
|
15
|
+
export * from "./ts_def_modules/compressedAir/assessment/compressor_performance_points";
|
|
16
|
+
export * from "./ts_def_modules/compressedAir/assessment/compressor_system_profile";
|
|
15
17
|
export * from "./ts_def_modules/compressedAir/assessment/centrifugal_compressor";
|
|
16
18
|
export * from "./ts_def_modules/compressedAir/assessment/load_unload_compressor";
|
|
17
19
|
export * from "./ts_def_modules/compressedAir/assessment/modulation_without_unload_compressor";
|
|
@@ -123,6 +125,8 @@ export type MeasurToolsSuite =
|
|
|
123
125
|
import("./ts_def_modules/compressedAir/receiver_tank").ReceiverTankModule &
|
|
124
126
|
import("./ts_def_modules/compressedAir/assessment/compressor").CompressorAssessmentSharedModule &
|
|
125
127
|
import("./ts_def_modules/compressedAir/assessment/compressor_eem").CompressorEemModule &
|
|
128
|
+
import("./ts_def_modules/compressedAir/assessment/compressor_performance_points").CompressorPerformancePointsModule &
|
|
129
|
+
import("./ts_def_modules/compressedAir/assessment/compressor_system_profile").CompressorSystemProfileModule &
|
|
126
130
|
import("./ts_def_modules/compressedAir/assessment/centrifugal_compressor").CentrifugalCompressorModule &
|
|
127
131
|
import("./ts_def_modules/compressedAir/assessment/load_unload_compressor").LoadUnloadCompressorModule &
|
|
128
132
|
import("./ts_def_modules/compressedAir/assessment/modulation_without_unload_compressor").ModulationWithoutUnloadCompressorModule &
|