From c566766c4de982f6416ca87fd48d9855f7c19390 Mon Sep 17 00:00:00 2001
From: "p.vanderwilt"
Date: Tue, 8 Jul 2025 15:29:55 +0200
Subject: [PATCH] Refactor boundary condition application in Reactor_PFR class
for improved clarity and efficiency
---
src/specificClass.js | 39 ++++++++++++++++++---------------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/src/specificClass.js b/src/specificClass.js
index 18af512..1d715a7 100644
--- a/src/specificClass.js
+++ b/src/specificClass.js
@@ -196,27 +196,6 @@ class Reactor_PFR extends Reactor {
return { topic: "Fluent", payload: { inlet: 0, F: math.sum(this.Fs), C: this.state.at(-1) }, timestamp: this.currentTime };
}
- /**
- * Apply boundary conditions to the reactor state.
- * for inlet, apply generalised Danckwerts BC, if there is not flow, apply Neumann BC with no flux
- * for outlet, apply regular Danckwerts BC (Neumann BC with no flux)
- * @param {Array} state - Current reactor state without enforced BCs.
- */
- _applyBoundaryConditions(state) {
- if (math.sum(this.Fs) > 0) { // Danckwerts BC
- const BC_C_in = math.multiply(1 / math.sum(this.Fs), [this.Fs], this.Cs_in)[0];
- const BC_gradient = Array(this.n_x).fill(0);
- BC_gradient[0] = -1;
- BC_gradient[1] = 1;
- const BC_dispersion = math.multiply((1 - this.alpha) * this.D*this.A / (math.sum(this.Fs) * this.d_x), [BC_gradient], state)[0];
- state[0] = math.add(BC_C_in, BC_dispersion).map(val => val < 0 ? 0 : val);
- } else { // Neumann BC (no flux)
- state[0] = state[1];
- }
- // Neumann BC (no flux)
- state[this.n_x-1] = state[this.n_x-2]
- }
-
/**
* Tick the reactor state using explicit finite difference method.
* @param {number} time_step - Time step for the simulation [d].
@@ -251,6 +230,24 @@ class Reactor_PFR extends Reactor {
return stateNew;
}
+ /**
+ * Apply boundary conditions to the reactor state.
+ * for inlet, apply generalised Danckwerts BC, if there is not flow, apply Neumann BC with no flux
+ * for outlet, apply regular Danckwerts BC (Neumann BC with no flux)
+ * @param {Array} state - Current reactor state without enforced BCs.
+ */
+ _applyBoundaryConditions(state) {
+ if (math.sum(this.Fs) > 0) { // Danckwerts BC
+ const BC_C_in = math.multiply(1 / math.sum(this.Fs), [this.Fs], this.Cs_in)[0];
+ const BC_dispersion_term = (1-this.alpha)*this.D*this.A/(math.sum(this.Fs)*this.d_x);
+ state[0] = math.multiply(1/(1+BC_dispersion_term), math.add(BC_C_in, math.multiply(BC_dispersion_term, state[1])));
+ } else {
+ state[0] = state[1];
+ }
+ // Neumann BC (no flux)
+ state[this.n_x-1] = state[this.n_x-2]
+ }
+
/**
* Create finite difference first derivative operator.
* @param {boolean} central - Use central difference scheme if true, otherwise use upwind scheme.