Skip to content

Commit

Permalink
Merge pull request #7342 from ORNL-AMO/issue-6854
Browse files Browse the repository at this point in the history
Issue 6854 - feedwater economizer bug fixes, help text update
  • Loading branch information
rhernandez-intertech authored Feb 18, 2025
2 parents f9080d3 + c20edd1 commit df906d4
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<label class="small" for="higherHeatingVal">Higher Heating Value</label>
<div class="input-group">
<input name="higherHeatingVal" type="number" step="10" class="form-control" formControlName="higherHeatingVal"
id="higherHeatingVal" onfocus="this.select();" (input)="calculate()" (focus)="focusField('fuelHV')">
id="higherHeatingVal" onfocus="this.select();" (input)="calculate()" (focus)="focusField('higherHeatingVal')">
<span *ngIf="settings.unitsOfMeasure == 'Imperial'" class="input-group-addon units">Btu/scf</span>
<span *ngIf="settings.unitsOfMeasure == 'Metric'" class="input-group-addon units">kJ/Nm<sup>3</sup>
</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,52 @@ <h6>
</h6>
</div>

<div class="my-2" *ngIf="currentField == 'o2InFlueGas'">
<div class="my-2" *ngIf="currentField == 'materialTypeId'">
<h6>
Fuel
<br>
<small class="text-muted">
Type of fuel used within the heating equipment or reaction chamber. The compositions and Heating Values of fuels
are intended
to represent "typical" compositions of these fuels. This tool can be made more accurate by using more accurate
fuel
compositions for your process. To add a new fuel , click "Add New Fuel". You can "start with existing fuel" and
edit
the composition or add a completely new material. You cannot use the name of a fuel already in the database.
</small>
</h6>
</div>


<div class="my-2" *ngIf="currentField == 'oxygenCalculationMethod'">
<h6>
Percent Oxygen Or Excess Air
<br>
<small class="text-muted">
Choose which value is known for the calculation of Available heat. Using Excess Air is recommended (for higher
accuracy)
if known.
<hr> O<sub>2</sub> in Flue Gas / Excess Air Dropdown options include
<u>
Excess Air
</u> or
<u>
Oxygen in Flue Gas
</u>
</small>
</h6>
</div>

<div class="my-2" *ngIf="currentField == 'flueGasO2'">
<h6>
O<sub>2</sub> in Flue Gas
<br>
<small class="text-muted">
This is the percentage of oxygen in the flue gases of the boiler. This is usually determined using flue gas analysis using external combustion analyzer (dry basis) or in stack oxygen sensor (wet basis) measurement. An average value should be used.
Molar (or volumetric) fraction (% Dry) of O<sub>2</sub> in outgoing flue gas (ignoring moisture content).
Higher O<sub>2</sub> in the exhaust indicates higher excess air and a greater amount of heat contained within the flue gas (lowering the available heat).
<br>
Flue gas O<sub>2</sub> (dry basis) reading is taken at the same location where flue gas temperature is measured to maintain accuracy of the calculations.
For many applications this is less than 10%, though a few systems (e.g., thermal oxidizers, paint shop ovens) it may be higher, but still below 21%.
<hr>
</small>
</h6>
Expand All @@ -157,6 +197,43 @@ <h6>
</div>
</div>

<div class="my-2" *ngIf="currentField == 'excessAir'">
<h6>
Excess Air
<br>
<small class="text-muted">
The excess air value represents excess air used in burners plus all air entering the furnace and going as flue gases form the furnace.
The value is expressed in terms of percentage of stoichiometric air required for the fuel used and can be calculated as the difference
between the measured O<sub>2</sub> and stoichiometric O<sub>2</sub> divided by the stoichiometric O<sub>2</sub>.
<br>
This should be minimized while still ensuring adequate air for complete combustion.
The absolute maximum value depends on the fuel, with some natural gas mixes near 500% and coal closer to 100%.
<hr>
</small>
</h6>
</div>


<div class="my-2" *ngIf="currentField == 'ambientAirTemperature' && settings.unitsOfMeasure == 'Imperial'">
<h6>
Ambient Air Temperature
<br>
<small class="text-muted">
Temperature of the air near the process heating unit. This is very likely to be less than 150&#8457;.
</small>
</h6>
</div>

<div class="my-2" *ngIf="currentField == 'ambientAirTemperature' && settings.unitsOfMeasure == 'Metric'">
<h6>
Ambient Air Temperature
<br>
<small class="text-muted">
Temperature of the air near the process heating unit. This is very likely to be less than 65&#8451;.
</small>
</h6>
</div>

<div class="my-2" *ngIf="currentField == 'combustionAirTemperature'">
<h6>
Combustion Air Temperature
Expand Down Expand Up @@ -262,13 +339,12 @@ <h6>
</h6>
</div>

<div class="my-2" *ngIf="currentField == 'priFuelHV'">
<div class="my-2" *ngIf="currentField == 'higherHeatingVal'">
<h6>
Fuel Higher Heating Value
Higher Heating Value
<br>
<small class="text-muted">
This is the calorific value of the fuel used for the secondary process which will be saved. This can be obtained
from the fuel composition analysis report or fuel invoice.
The total amount of heat released when a specific quantity of fuel is completely burned, taking into account the heat generated by the condensation of water vapor produced during combustion, essentially representing the maximum potential energy a fuel can provide.
</small>
</h6>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ <h3>Feedwater Economizer</h3>
</div>
<div class="panel-group">
<div class="calculator-panel-container modification mh-100"
[ngClass]="{'small-screen-tab': smallScreenTab === 'form'}" [ngStyle]="{'height.px': containerHeight}">
[ngClass]="{'small-screen-tab': smallScreenTab === 'form', 'modal-open': isModalOpen == true}"
[ngStyle]="{'height.px': containerHeight}">
<div class="d-flex flex-column m-4">
<app-feedwater-economizer-form [inTreasureHunt]="inTreasureHunt" [settings]="settings">
</app-feedwater-economizer-form>
Expand All @@ -56,7 +57,8 @@ <h3>Feedwater Economizer</h3>

<!-- help panel -->
<div class="calculator-panel-container help-panel"
[ngClass]="{'small-screen-tab': smallScreenTab === 'details'}" [ngStyle]="{'height.px': containerHeight}">
[ngClass]="{'small-screen-tab': smallScreenTab === 'details', 'modal-open': isModalOpen == true}"
[ngStyle]="{'height.px': containerHeight}">
<div class="d-flex flex-column mh-100">
<div class="d-flex flex-wrap tabs primary sticky-top">
<div class="flex-fill panel-tab-item h-100" [ngClass]="{'active': tabSelect == 'results'}">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ export class FeedwaterEconomizerComponent implements OnInit {
}, 100);
}
feedWaterInputSub: Subscription;
modalopenSub: Subscription;
isModalOpen: boolean;
containerHeight: number;
tabSelect: string = 'results';
smallScreenTab: string = 'form';
Expand Down Expand Up @@ -66,10 +68,15 @@ export class FeedwaterEconomizerComponent implements OnInit {
this.calculate();
}
});

this.modalopenSub = this.feedwaterEconomizerService.modalOpen.subscribe(isModalOpen => {
this.isModalOpen = isModalOpen;
});
}

ngOnDestroy() {
this.feedWaterInputSub.unsubscribe();
this.modalopenSub.unsubscribe();
if (this.inTreasureHunt) {
this.feedwaterEconomizerService.feedwaterEconomizerInput.next(undefined);
}
Expand Down

0 comments on commit df906d4

Please sign in to comment.