Compare commits
3 Commits
baecf2f599
...
boundary-c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f44bac9aab | ||
| 1dc9cd0031 | |||
| 2a520be33b |
@@ -124,12 +124,7 @@ class Reactor {
|
||||
return;
|
||||
}
|
||||
|
||||
let position;
|
||||
if (measurementChild.config.functionality.distance !== 'undefined') {
|
||||
position = measurementChild.config.functionality.distance;
|
||||
} else {
|
||||
position = measurementChild.config.functionality.positionVsParent;
|
||||
}
|
||||
const position = measurementChild.config.functionality.positionVsParent;
|
||||
const measurementType = measurementChild.config.asset.type;
|
||||
const eventName = `${measurementType}.measured.${position}`;
|
||||
|
||||
@@ -155,6 +150,14 @@ class Reactor {
|
||||
return;
|
||||
}
|
||||
|
||||
if (reactorChild.functionality.positionVsParent != "upstream") {
|
||||
this.logger.warn("Reactor children of reactors should always be upstream.");
|
||||
}
|
||||
|
||||
if (math.abs(reactorChild.d_x - this.d_x) / this.d_x < 0.025) {
|
||||
this.logger.warn("Significant grid sizing discrepancies between adjacent reactors! Change resolutions to match reactors grid step, or implement boundary value interpolation.");
|
||||
}
|
||||
|
||||
this.upstreamReactor = reactorChild;
|
||||
reactorChild.downstreamReactor = this;
|
||||
|
||||
@@ -271,15 +274,16 @@ class Reactor_PFR extends Reactor {
|
||||
* @param {object} input - Input object (msg) containing payload with dispersion value [m2 d-1].
|
||||
*/
|
||||
set setDispersion(input) {
|
||||
this.D = input.payload;
|
||||
this.D = this._constrainDispersion(input.payload);
|
||||
}
|
||||
|
||||
updateState(newTime) {
|
||||
super.updateState(newTime);
|
||||
let Pe_local = this.d_x*math.sum(this.Fs)/(this.D*this.A)
|
||||
// let Pe_local = this.d_x*math.sum(this.Fs)/(this.D*this.A)
|
||||
this.D = this._constrainDispersion(this.D);
|
||||
let Co_D = this.D*this.timeStep/(this.d_x*this.d_x);
|
||||
|
||||
(Pe_local >= 2) && this.logger.warn(`Local Péclet number (${Pe_local}) is too high! Increase reactor resolution.`);
|
||||
// (Pe_local >= 2) && this.logger.warn(`Local Péclet number (${Pe_local}) is too high! Increase reactor resolution.`);
|
||||
(Co_D >= 0.5) && this.logger.warn(`Courant number (${Co_D}) is too high! Reduce time step size.`);
|
||||
|
||||
if(DEBUG) {
|
||||
@@ -334,7 +338,7 @@ class Reactor_PFR extends Reactor {
|
||||
_updateMeasurement(measurementType, value, position, context) {
|
||||
switch(measurementType) {
|
||||
case "quantity (oxygen)":
|
||||
let grid_pos = Math.round(position / this.config.length * this.n_x);
|
||||
let grid_pos = Math.round(context.distance / this.config.length * this.n_x);
|
||||
this.state[grid_pos][S_O_INDEX] = value; // naive approach for reconciling measurements and simulation
|
||||
break;
|
||||
default:
|
||||
@@ -407,6 +411,15 @@ class Reactor_PFR extends Reactor {
|
||||
D2.forEach((row, i) => i < BC_PADDING || i >= this.n_x+BC_PADDING ? row.fill(0) : row);
|
||||
return D2;
|
||||
}
|
||||
|
||||
_constrainDispersion(D) {
|
||||
const Dmin = math.sum(this.Fs) * this.d_x / (1.999 * this.A);
|
||||
if (D < Dmin) {
|
||||
this.logger.warn(`Local Péclet number too high! Constraining given dispersion (${D}) to minimal value (${Dmin}).`);
|
||||
return Dmin;
|
||||
}
|
||||
return D;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { Reactor_CSTR, Reactor_PFR };
|
||||
|
||||
Reference in New Issue
Block a user