Compare commits
5 Commits
dev-Pieter
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7eecbddd19 | |||
| d56e422d90 | |||
| 61f911af6b | |||
| 9c3a32c2cb | |||
| ff814074a4 |
29
README.md
29
README.md
@@ -1,17 +1,20 @@
|
||||
# reactor
|
||||
# Reactor: Advanced Hydraulic Tank & Biological Process Simulator
|
||||
|
||||
Reactor: Advanced Hydraulic Tank & Biological Process Simulator
|
||||
A comprehensive reactor class for wastewater treatment simulation featuring non-ideal plug flow hydraulics and ASM3 biological modeling.
|
||||
|
||||
A comprehensive reactor class for wastewater treatment simulation featuring plug flow hydraulics, ASM1-ASM3 biological modeling, and multi-sectional concentration tracking. Implements hydraulic retention time calculations, dispersion modeling, and real-time biological reaction kinetics for accurate process simulation.
|
||||
## How to use this Node
|
||||
### Set Node Properties
|
||||
- Set reactor type: Continuously Stirred Tank Reactor (CSTR) or Plug Flow Reactor (PFR)
|
||||
- Configure reactor sizing: Set reactor volume [ $m^3$ ] and (for PFRs) set the reactor length [ $m$ ]
|
||||
- (For PFRs) set reactor spatial resolution: A value of 10 or 20 is good. A higher resolution means more accurate simulation, at higher computational expense. Note that connected reactors must have similar Δx values.
|
||||
- Set initial state of reactor: set the intial concentrations of all relevant reaction species.
|
||||
- (Optional) set $k_L a$ to calculate OTR internally, rather than providing it explicitly, using simple mass transfer model.
|
||||
|
||||
Key Features:
|
||||
|
||||
Plug Flow Hydraulics: Multi-section reactor with configurable sectioning factor and dispersion modeling
|
||||
ASM1 Integration: Complete biological nutrient removal modeling with 13 state variables (COD, nitrogen, phosphorus)
|
||||
Dynamic Volume Control: Automatic section management with overflow handling and retention time calculations
|
||||
Oxygen Transfer: Saturation-limited O2 transfer with Fick's law slowdown effects and solubility curves
|
||||
Real-time Kinetics: Continuous biological reaction rate calculations with configurable time acceleration
|
||||
Weighted Averaging: Volume-based concentration mixing for accurate mass balance calculations
|
||||
Child Registration: Integration with diffuser systems and upstream/downstream reactor networks
|
||||
Supports complex biological treatment train modeling with temperature compensation, sludge calculations, and comprehensive process monitoring for wastewater treatment plant optimization and regulatory compliance.
|
||||
### Accepted Node inputs
|
||||
- \{ topic: clock, payload: \<timestamp [ $ms$ ]\> \} - **required** clock signal to make reactor update state.
|
||||
- \{ topic: Fluent, payload: \{ F: \<flow rate [ $m^3 d^{-1}$ ]\>, C: \<array with concentrations\> \} \} - sets inflow composition and flow rate.
|
||||
- \{ topic: Dispersion, payload: \<dispersion coefficient in [ $m d^{-2}$ ]\> \} - sets PFR dispersion coefficient.
|
||||
- \{ topic: OTR, payload: \<oxygen transfer rate [ $ g d^{-1} m^{-3}$ ]\> \} - sets current oxygen transfer rate.
|
||||
|
||||
## Troubleshooting
|
||||
Check for possible numerical warnings. These tell you which simulation parameters to change. If solutions appear to be oscillate, try reducing the time step. If solutions appear to be too dispersive, try increasing the reactor resolution.
|
||||
838
example_flow/reactor_flows.json
Normal file
838
example_flow/reactor_flows.json
Normal file
@@ -0,0 +1,838 @@
|
||||
[
|
||||
{
|
||||
"id": "a6b85e226d144df1",
|
||||
"type": "tab",
|
||||
"label": "Flow 3",
|
||||
"disabled": false,
|
||||
"info": "",
|
||||
"env": []
|
||||
},
|
||||
{
|
||||
"id": "a94c85d65c71b66a",
|
||||
"type": "inject",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Influx composition 1",
|
||||
"props": [
|
||||
{
|
||||
"p": "payload"
|
||||
},
|
||||
{
|
||||
"p": "topic",
|
||||
"vt": "str"
|
||||
},
|
||||
{
|
||||
"p": "timestamp",
|
||||
"v": "",
|
||||
"vt": "date"
|
||||
}
|
||||
],
|
||||
"repeat": "864",
|
||||
"crontab": "",
|
||||
"once": true,
|
||||
"onceDelay": "5",
|
||||
"topic": "Fluent",
|
||||
"payload": "{\"inlet\":0,\"F\":6600,\"C\":[0,30,100,16,0,0,5,25,75,30,0,0,125]}",
|
||||
"payloadType": "json",
|
||||
"x": 260,
|
||||
"y": 240,
|
||||
"wires": [
|
||||
[
|
||||
"b726c5be41c24dcb"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0ebfbbf57bba79f1",
|
||||
"type": "inject",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "",
|
||||
"props": [
|
||||
{
|
||||
"p": "timestamp",
|
||||
"v": "",
|
||||
"vt": "date"
|
||||
},
|
||||
{
|
||||
"p": "topic",
|
||||
"vt": "str"
|
||||
}
|
||||
],
|
||||
"repeat": "1",
|
||||
"crontab": "",
|
||||
"once": true,
|
||||
"onceDelay": 0.1,
|
||||
"topic": "clock",
|
||||
"x": 300,
|
||||
"y": 280,
|
||||
"wires": [
|
||||
[
|
||||
"b726c5be41c24dcb"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "cd0e4a78d1a59a6e",
|
||||
"type": "inject",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "",
|
||||
"props": [
|
||||
{
|
||||
"p": "payload"
|
||||
},
|
||||
{
|
||||
"p": "topic",
|
||||
"vt": "str"
|
||||
}
|
||||
],
|
||||
"repeat": "",
|
||||
"crontab": "",
|
||||
"once": true,
|
||||
"onceDelay": 0.1,
|
||||
"topic": "Dispersion",
|
||||
"payload": "100",
|
||||
"payloadType": "num",
|
||||
"x": 260,
|
||||
"y": 320,
|
||||
"wires": [
|
||||
[
|
||||
"b726c5be41c24dcb",
|
||||
"b0819ff9a4010227"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b726c5be41c24dcb",
|
||||
"type": "reactor",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Anoxic 1",
|
||||
"reactor_type": "PFR",
|
||||
"volume": "730",
|
||||
"length": "10",
|
||||
"resolution_L": "20",
|
||||
"kla": "",
|
||||
"S_O_init": 0,
|
||||
"S_I_init": 30,
|
||||
"S_S_init": 100,
|
||||
"S_NH_init": 16,
|
||||
"S_N2_init": 0,
|
||||
"S_NO_init": 0,
|
||||
"S_HCO_init": 5,
|
||||
"X_I_init": 25,
|
||||
"X_S_init": 75,
|
||||
"X_H_init": 30,
|
||||
"X_STO_init": 0,
|
||||
"X_A_init": "30",
|
||||
"X_TS_init": "132",
|
||||
"timeStep": "2",
|
||||
"enableLog": true,
|
||||
"logLevel": "info",
|
||||
"positionVsParent": "upstream",
|
||||
"x": 540,
|
||||
"y": 240,
|
||||
"wires": [
|
||||
[
|
||||
"057ab2dcd4739aef"
|
||||
],
|
||||
[],
|
||||
[
|
||||
"b0819ff9a4010227",
|
||||
"214aff7330e81d3f",
|
||||
"2ec38c4ae9aa6e7e"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b0819ff9a4010227",
|
||||
"type": "reactor",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Aerobic 1",
|
||||
"reactor_type": "PFR",
|
||||
"volume": "1460",
|
||||
"length": "20",
|
||||
"resolution_L": "40",
|
||||
"kla": "2400",
|
||||
"S_O_init": 0,
|
||||
"S_I_init": 30,
|
||||
"S_S_init": 100,
|
||||
"S_NH_init": 16,
|
||||
"S_N2_init": 0,
|
||||
"S_NO_init": 0,
|
||||
"S_HCO_init": 5,
|
||||
"X_I_init": 25,
|
||||
"X_S_init": 75,
|
||||
"X_H_init": "500",
|
||||
"X_STO_init": 0,
|
||||
"X_A_init": "30",
|
||||
"X_TS_init": "132",
|
||||
"timeStep": "2",
|
||||
"enableLog": true,
|
||||
"logLevel": "info",
|
||||
"positionVsParent": "upstream",
|
||||
"x": 940,
|
||||
"y": 240,
|
||||
"wires": [
|
||||
[
|
||||
"e0049d66fefeb3e6"
|
||||
],
|
||||
[],
|
||||
[
|
||||
"47120bc82aa7bf49"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "214aff7330e81d3f",
|
||||
"type": "rotatingMachine",
|
||||
"z": "a6b85e226d144df1",
|
||||
"speed": 1,
|
||||
"startup": 0,
|
||||
"warmup": 0,
|
||||
"shutdown": 0,
|
||||
"cooldown": 0,
|
||||
"machineCurve": {},
|
||||
"flowNumber": "1",
|
||||
"uuid": "",
|
||||
"supplier": "Hidrostal",
|
||||
"category": "Pumps",
|
||||
"assetType": "Centrifugal",
|
||||
"model": "hidrostal-H05K-S03R",
|
||||
"unit": "l/s",
|
||||
"enableLog": true,
|
||||
"logLevel": "info",
|
||||
"positionVsParent": "downstream",
|
||||
"positionIcon": "→",
|
||||
"hasDistance": false,
|
||||
"distance": "",
|
||||
"x": 740,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"b0819ff9a4010227"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0be74d5c77febec1",
|
||||
"type": "measurement",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "sensor",
|
||||
"scaling": false,
|
||||
"i_min": 0,
|
||||
"i_max": 0,
|
||||
"i_offset": 0,
|
||||
"o_min": 900,
|
||||
"o_max": 1200,
|
||||
"simulator": true,
|
||||
"smooth_method": "",
|
||||
"count": 10,
|
||||
"uuid": "",
|
||||
"supplier": "Vega",
|
||||
"category": "Sensor",
|
||||
"assetType": "Flow",
|
||||
"model": "VegaFlow 10",
|
||||
"unit": "m³/h",
|
||||
"enableLog": true,
|
||||
"logLevel": "error",
|
||||
"positionVsParent": "atEquipment",
|
||||
"positionIcon": "⊥",
|
||||
"hasDistance": false,
|
||||
"distance": "",
|
||||
"x": 600,
|
||||
"y": 460,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"214aff7330e81d3f"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "668f41a05698f21b",
|
||||
"type": "inject",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "",
|
||||
"props": [
|
||||
{
|
||||
"p": "payload"
|
||||
},
|
||||
{
|
||||
"p": "topic",
|
||||
"vt": "str"
|
||||
}
|
||||
],
|
||||
"repeat": "",
|
||||
"crontab": "",
|
||||
"once": true,
|
||||
"onceDelay": 0.1,
|
||||
"topic": "execSequence",
|
||||
"payload": "{\"source\":\"parent\",\"action\":\"execSequence\",\"parameter\":\"startup\"}",
|
||||
"payloadType": "json",
|
||||
"x": 330,
|
||||
"y": 400,
|
||||
"wires": [
|
||||
[
|
||||
"214aff7330e81d3f",
|
||||
"2ec38c4ae9aa6e7e"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "47120bc82aa7bf49",
|
||||
"type": "settler",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "",
|
||||
"model": "mb-model",
|
||||
"enableLog": true,
|
||||
"logLevel": "info",
|
||||
"positionVsParent": "atEquipment",
|
||||
"x": 1100,
|
||||
"y": 400,
|
||||
"wires": [
|
||||
[
|
||||
"b1af49d1d0eb6783",
|
||||
"6baffb7954cf0cce"
|
||||
],
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2ec38c4ae9aa6e7e",
|
||||
"type": "rotatingMachine",
|
||||
"z": "a6b85e226d144df1",
|
||||
"speed": 1,
|
||||
"startup": 0,
|
||||
"warmup": 0,
|
||||
"shutdown": 0,
|
||||
"cooldown": 0,
|
||||
"machineCurve": {},
|
||||
"flowNumber": "2",
|
||||
"uuid": "",
|
||||
"supplier": "Hidrostal",
|
||||
"category": "Pumps",
|
||||
"assetType": "Centrifugal",
|
||||
"model": "hidrostal-H05K-S03R",
|
||||
"unit": "l/s",
|
||||
"enableLog": true,
|
||||
"logLevel": "info",
|
||||
"positionVsParent": "downstream",
|
||||
"positionIcon": "→",
|
||||
"hasDistance": false,
|
||||
"distance": "",
|
||||
"x": 860,
|
||||
"y": 460,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"47120bc82aa7bf49"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "21eff612371519c5",
|
||||
"type": "measurement",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "sensor",
|
||||
"scaling": false,
|
||||
"i_min": 0,
|
||||
"i_max": 0,
|
||||
"i_offset": 0,
|
||||
"o_min": 500,
|
||||
"o_max": 660,
|
||||
"simulator": true,
|
||||
"smooth_method": "",
|
||||
"count": 10,
|
||||
"uuid": "",
|
||||
"supplier": "Vega",
|
||||
"category": "Sensor",
|
||||
"assetType": "Flow",
|
||||
"model": "VegaFlow 10",
|
||||
"unit": "m³/h",
|
||||
"enableLog": true,
|
||||
"logLevel": "error",
|
||||
"positionVsParent": "atEquipment",
|
||||
"positionIcon": "⊥",
|
||||
"hasDistance": false,
|
||||
"distance": "",
|
||||
"x": 720,
|
||||
"y": 580,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"2ec38c4ae9aa6e7e"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "057ab2dcd4739aef",
|
||||
"type": "function",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Data_converter",
|
||||
"func": "if (msg.topic != \"Fluent\") {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"S_O\", \"Y\": S_O},\n { \"Series\": \"S_I\", \"Y\": S_I},\n { \"Series\": \"S_S\", \"Y\": S_S},\n { \"Series\": \"S_NH\", \"Y\": S_NH},\n { \"Series\": \"S_N2\", \"Y\": S_N2},\n { \"Series\": \"S_NO\", \"Y\": S_NO},\n { \"Series\": \"S_HCO\", \"Y\": S_HCO},\n { \"Series\": \"X_I\", \"Y\": X_I},\n { \"Series\": \"X_S\", \"Y\": X_S},\n { \"Series\": \"X_H\", \"Y\": X_H},\n { \"Series\": \"X_STO\", \"Y\": X_STO},\n { \"Series\": \"X_A\", \"Y\": X_A},\n { \"Series\": \"X_TS\", \"Y\": X_TS}\n ]};\n\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"timeout": 0,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 720,
|
||||
"y": 180,
|
||||
"wires": [
|
||||
[
|
||||
"02a932317c76721e"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "02a932317c76721e",
|
||||
"type": "ui-chart",
|
||||
"z": "a6b85e226d144df1",
|
||||
"group": "ae38454098a37db0",
|
||||
"name": "Anoxic reactor",
|
||||
"label": "Anoxic reactor",
|
||||
"order": 9007199254740991,
|
||||
"chartType": "line",
|
||||
"category": "Series",
|
||||
"categoryType": "property",
|
||||
"xAxisLabel": "",
|
||||
"xAxisProperty": "",
|
||||
"xAxisPropertyType": "timestamp",
|
||||
"xAxisType": "time",
|
||||
"xAxisFormat": "",
|
||||
"xAxisFormatType": "auto",
|
||||
"xmin": "",
|
||||
"xmax": "",
|
||||
"yAxisLabel": "",
|
||||
"yAxisProperty": "Y",
|
||||
"yAxisPropertyType": "property",
|
||||
"ymin": "",
|
||||
"ymax": "",
|
||||
"bins": 10,
|
||||
"action": "append",
|
||||
"stackSeries": false,
|
||||
"pointShape": "circle",
|
||||
"pointRadius": 4,
|
||||
"showLegend": true,
|
||||
"removeOlder": "8",
|
||||
"removeOlderUnit": "3600",
|
||||
"removeOlderPoints": "2000",
|
||||
"colors": [
|
||||
"#0095ff",
|
||||
"#ff0000",
|
||||
"#ff7f0e",
|
||||
"#2ca02c",
|
||||
"#a347e1",
|
||||
"#d62728",
|
||||
"#ff9896",
|
||||
"#9467bd",
|
||||
"#c5b0d5"
|
||||
],
|
||||
"textColor": [
|
||||
"#666666"
|
||||
],
|
||||
"textColorDefault": true,
|
||||
"gridColor": [
|
||||
"#e5e5e5"
|
||||
],
|
||||
"gridColorDefault": true,
|
||||
"width": 6,
|
||||
"height": 8,
|
||||
"className": "",
|
||||
"interpolation": "linear",
|
||||
"x": 920,
|
||||
"y": 180,
|
||||
"wires": [
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "e0049d66fefeb3e6",
|
||||
"type": "function",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Data_converter",
|
||||
"func": "if (msg.topic != \"Fluent\") {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"S_O\", \"Y\": S_O},\n { \"Series\": \"S_I\", \"Y\": S_I},\n { \"Series\": \"S_S\", \"Y\": S_S},\n { \"Series\": \"S_NH\", \"Y\": S_NH},\n { \"Series\": \"S_N2\", \"Y\": S_N2},\n { \"Series\": \"S_NO\", \"Y\": S_NO},\n { \"Series\": \"S_HCO\", \"Y\": S_HCO},\n { \"Series\": \"X_I\", \"Y\": X_I},\n { \"Series\": \"X_S\", \"Y\": X_S},\n { \"Series\": \"X_H\", \"Y\": X_H},\n { \"Series\": \"X_STO\", \"Y\": X_STO},\n { \"Series\": \"X_A\", \"Y\": X_A},\n { \"Series\": \"X_TS\", \"Y\": X_TS}\n ]};\n\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"timeout": 0,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 1140,
|
||||
"y": 220,
|
||||
"wires": [
|
||||
[
|
||||
"70eeb4c8caa2db77"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "70eeb4c8caa2db77",
|
||||
"type": "ui-chart",
|
||||
"z": "a6b85e226d144df1",
|
||||
"group": "ae38454098a37db0",
|
||||
"name": "Aerobic reactor",
|
||||
"label": "Aerobic reactor / recirculation",
|
||||
"order": 9007199254740991,
|
||||
"chartType": "line",
|
||||
"category": "Series",
|
||||
"categoryType": "property",
|
||||
"xAxisLabel": "",
|
||||
"xAxisProperty": "",
|
||||
"xAxisPropertyType": "timestamp",
|
||||
"xAxisType": "time",
|
||||
"xAxisFormat": "",
|
||||
"xAxisFormatType": "auto",
|
||||
"xmin": "",
|
||||
"xmax": "",
|
||||
"yAxisLabel": "",
|
||||
"yAxisProperty": "Y",
|
||||
"yAxisPropertyType": "property",
|
||||
"ymin": "",
|
||||
"ymax": "",
|
||||
"bins": 10,
|
||||
"action": "append",
|
||||
"stackSeries": false,
|
||||
"pointShape": "circle",
|
||||
"pointRadius": 4,
|
||||
"showLegend": true,
|
||||
"removeOlder": "8",
|
||||
"removeOlderUnit": "3600",
|
||||
"removeOlderPoints": "2000",
|
||||
"colors": [
|
||||
"#0095ff",
|
||||
"#ff0000",
|
||||
"#ff7f0e",
|
||||
"#2ca02c",
|
||||
"#a347e1",
|
||||
"#d62728",
|
||||
"#ff9896",
|
||||
"#9467bd",
|
||||
"#c5b0d5"
|
||||
],
|
||||
"textColor": [
|
||||
"#666666"
|
||||
],
|
||||
"textColorDefault": true,
|
||||
"gridColor": [
|
||||
"#e5e5e5"
|
||||
],
|
||||
"gridColorDefault": true,
|
||||
"width": 6,
|
||||
"height": 8,
|
||||
"className": "",
|
||||
"interpolation": "linear",
|
||||
"x": 1340,
|
||||
"y": 220,
|
||||
"wires": [
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b1af49d1d0eb6783",
|
||||
"type": "function",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Data_converter",
|
||||
"func": "if (msg.topic != \"Fluent\" || msg.payload.inlet == 0) {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"X_I\", \"Y\": X_I},\n { \"Series\": \"X_S\", \"Y\": X_S},\n { \"Series\": \"X_H\", \"Y\": X_H},\n { \"Series\": \"X_STO\", \"Y\": X_STO},\n { \"Series\": \"X_A\", \"Y\": X_A},\n { \"Series\": \"X_TS\", \"Y\": X_TS}\n ]};\n\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"timeout": 0,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 1320,
|
||||
"y": 380,
|
||||
"wires": [
|
||||
[
|
||||
"0a3ffa69046a4844"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0a3ffa69046a4844",
|
||||
"type": "ui-chart",
|
||||
"z": "a6b85e226d144df1",
|
||||
"group": "de8b029d69f26c0e",
|
||||
"name": "Sludge composition",
|
||||
"label": "Sludge composition",
|
||||
"order": 9007199254740991,
|
||||
"chartType": "line",
|
||||
"category": "Series",
|
||||
"categoryType": "property",
|
||||
"xAxisLabel": "",
|
||||
"xAxisProperty": "",
|
||||
"xAxisPropertyType": "timestamp",
|
||||
"xAxisType": "time",
|
||||
"xAxisFormat": "",
|
||||
"xAxisFormatType": "auto",
|
||||
"xmin": "",
|
||||
"xmax": "",
|
||||
"yAxisLabel": "",
|
||||
"yAxisProperty": "Y",
|
||||
"yAxisPropertyType": "property",
|
||||
"ymin": "",
|
||||
"ymax": "",
|
||||
"bins": 10,
|
||||
"action": "append",
|
||||
"stackSeries": false,
|
||||
"pointShape": "circle",
|
||||
"pointRadius": 4,
|
||||
"showLegend": true,
|
||||
"removeOlder": "8",
|
||||
"removeOlderUnit": "3600",
|
||||
"removeOlderPoints": "2000",
|
||||
"colors": [
|
||||
"#0095ff",
|
||||
"#ff0000",
|
||||
"#ff7f0e",
|
||||
"#2ca02c",
|
||||
"#a347e1",
|
||||
"#d62728",
|
||||
"#ff9896",
|
||||
"#9467bd",
|
||||
"#c5b0d5"
|
||||
],
|
||||
"textColor": [
|
||||
"#666666"
|
||||
],
|
||||
"textColorDefault": true,
|
||||
"gridColor": [
|
||||
"#e5e5e5"
|
||||
],
|
||||
"gridColorDefault": true,
|
||||
"width": 6,
|
||||
"height": 8,
|
||||
"className": "",
|
||||
"interpolation": "linear",
|
||||
"x": 1530,
|
||||
"y": 380,
|
||||
"wires": [
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "272b4b0050479d13",
|
||||
"type": "measurement",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "sensor",
|
||||
"scaling": false,
|
||||
"i_min": 0,
|
||||
"i_max": 0,
|
||||
"i_offset": 0,
|
||||
"o_min": 3200,
|
||||
"o_max": 4000,
|
||||
"simulator": true,
|
||||
"smooth_method": "",
|
||||
"count": 10,
|
||||
"uuid": "",
|
||||
"supplier": "Vega",
|
||||
"category": "Sensor",
|
||||
"assetType": "Quantity (TSS)",
|
||||
"model": "VegaSolidsProbe",
|
||||
"unit": "g/m³",
|
||||
"enableLog": true,
|
||||
"logLevel": "error",
|
||||
"positionVsParent": "atEquipment",
|
||||
"positionIcon": "⊥",
|
||||
"hasDistance": false,
|
||||
"distance": "",
|
||||
"x": 930,
|
||||
"y": 580,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"47120bc82aa7bf49"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6baffb7954cf0cce",
|
||||
"type": "function",
|
||||
"z": "a6b85e226d144df1",
|
||||
"name": "Data_converter",
|
||||
"func": "if (msg.topic != \"Fluent\" || msg.payload.inlet == 1 || msg.payload.inlet == 2) {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"S_O\", \"Y\": S_O},\n { \"Series\": \"S_I\", \"Y\": S_I},\n { \"Series\": \"S_S\", \"Y\": S_S},\n { \"Series\": \"S_NH\", \"Y\": S_NH},\n { \"Series\": \"S_N2\", \"Y\": S_N2},\n { \"Series\": \"S_NO\", \"Y\": S_NO},\n { \"Series\": \"S_HCO\", \"Y\": S_HCO}\n ]};\n\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"timeout": 0,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 1320,
|
||||
"y": 420,
|
||||
"wires": [
|
||||
[
|
||||
"df288814a2a9a2b1"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "df288814a2a9a2b1",
|
||||
"type": "ui-chart",
|
||||
"z": "a6b85e226d144df1",
|
||||
"group": "de8b029d69f26c0e",
|
||||
"name": "Effluent",
|
||||
"label": "Effluent",
|
||||
"order": 9007199254740991,
|
||||
"chartType": "line",
|
||||
"category": "Series",
|
||||
"categoryType": "property",
|
||||
"xAxisLabel": "",
|
||||
"xAxisProperty": "",
|
||||
"xAxisPropertyType": "timestamp",
|
||||
"xAxisType": "time",
|
||||
"xAxisFormat": "",
|
||||
"xAxisFormatType": "auto",
|
||||
"xmin": "",
|
||||
"xmax": "",
|
||||
"yAxisLabel": "",
|
||||
"yAxisProperty": "Y",
|
||||
"yAxisPropertyType": "property",
|
||||
"ymin": "",
|
||||
"ymax": "",
|
||||
"bins": 10,
|
||||
"action": "append",
|
||||
"stackSeries": false,
|
||||
"pointShape": "circle",
|
||||
"pointRadius": 4,
|
||||
"showLegend": true,
|
||||
"removeOlder": "8",
|
||||
"removeOlderUnit": "3600",
|
||||
"removeOlderPoints": "2000",
|
||||
"colors": [
|
||||
"#0095ff",
|
||||
"#ff0000",
|
||||
"#ff7f0e",
|
||||
"#2ca02c",
|
||||
"#a347e1",
|
||||
"#d62728",
|
||||
"#ff9896",
|
||||
"#9467bd",
|
||||
"#c5b0d5"
|
||||
],
|
||||
"textColor": [
|
||||
"#666666"
|
||||
],
|
||||
"textColorDefault": true,
|
||||
"gridColor": [
|
||||
"#e5e5e5"
|
||||
],
|
||||
"gridColorDefault": true,
|
||||
"width": 6,
|
||||
"height": 8,
|
||||
"className": "",
|
||||
"interpolation": "linear",
|
||||
"x": 1520,
|
||||
"y": 420,
|
||||
"wires": [
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ae38454098a37db0",
|
||||
"type": "ui-group",
|
||||
"name": "Group 3",
|
||||
"page": "ca564642bfc5606c",
|
||||
"width": 6,
|
||||
"height": 1,
|
||||
"order": -1,
|
||||
"showTitle": true,
|
||||
"className": "",
|
||||
"visible": "true",
|
||||
"disabled": "false",
|
||||
"groupType": "default"
|
||||
},
|
||||
{
|
||||
"id": "de8b029d69f26c0e",
|
||||
"type": "ui-group",
|
||||
"name": "Group 4",
|
||||
"page": "ca564642bfc5606c",
|
||||
"width": 6,
|
||||
"height": 1,
|
||||
"order": -1,
|
||||
"showTitle": true,
|
||||
"className": "",
|
||||
"visible": "true",
|
||||
"disabled": "false",
|
||||
"groupType": "default"
|
||||
},
|
||||
{
|
||||
"id": "ca564642bfc5606c",
|
||||
"type": "ui-page",
|
||||
"name": "PFR",
|
||||
"ui": "90eb5f47d95b4087",
|
||||
"path": "/page2",
|
||||
"icon": "home",
|
||||
"layout": "grid",
|
||||
"theme": "2c8bcaa0046b4323",
|
||||
"breakpoints": [
|
||||
{
|
||||
"name": "Default",
|
||||
"px": "0",
|
||||
"cols": "3"
|
||||
},
|
||||
{
|
||||
"name": "Tablet",
|
||||
"px": "576",
|
||||
"cols": "6"
|
||||
},
|
||||
{
|
||||
"name": "Small Desktop",
|
||||
"px": "768",
|
||||
"cols": "9"
|
||||
},
|
||||
{
|
||||
"name": "Desktop",
|
||||
"px": "1024",
|
||||
"cols": "12"
|
||||
}
|
||||
],
|
||||
"order": -1,
|
||||
"className": "",
|
||||
"visible": "true",
|
||||
"disabled": "false"
|
||||
},
|
||||
{
|
||||
"id": "90eb5f47d95b4087",
|
||||
"type": "ui-base",
|
||||
"name": "Dashboard",
|
||||
"path": "/dashboard",
|
||||
"appIcon": "",
|
||||
"includeClientData": true,
|
||||
"acceptsClientConfig": [
|
||||
"ui-notification",
|
||||
"ui-control"
|
||||
],
|
||||
"showPathInSidebar": false,
|
||||
"headerContent": "page",
|
||||
"navigationStyle": "default",
|
||||
"titleBarStyle": "default",
|
||||
"showReconnectNotification": true,
|
||||
"notificationDisplayTime": 1,
|
||||
"showDisconnectNotification": true,
|
||||
"allowInstall": true
|
||||
},
|
||||
{
|
||||
"id": "2c8bcaa0046b4323",
|
||||
"type": "ui-theme",
|
||||
"name": "Default",
|
||||
"colors": {
|
||||
"surface": "#ffffff",
|
||||
"primary": "#0094ce",
|
||||
"bgPage": "#eeeeee",
|
||||
"groupBg": "#ffffff",
|
||||
"groupOutline": "#cccccc"
|
||||
},
|
||||
"sizes": {
|
||||
"density": "default",
|
||||
"pagePadding": "12px",
|
||||
"groupGap": "12px",
|
||||
"groupBorderRadius": "4px",
|
||||
"widgetGap": "12px"
|
||||
}
|
||||
}
|
||||
]
|
||||
16
reactor.html
16
reactor.html
@@ -153,13 +153,18 @@
|
||||
<label for="node-input-length"><i class="fa fa-tag"></i> Reactor length [m]</label>
|
||||
<input type="text" id="node-input-length" placeholder="m">
|
||||
</div>
|
||||
<h2> Simulation parameters </h2>
|
||||
<div class="form-row">
|
||||
<label for="node-input-timeStep"><i class="fa fa-tag"></i> Time step [s]</label>
|
||||
<input type="text" id="node-input-timeStep" placeholder="s">
|
||||
</div>
|
||||
<div class="form-row PFR">
|
||||
<label for="node-input-resolution_L"><i class="fa fa-tag"></i> Resolution</label>
|
||||
<label for="node-input-resolution_L"><i class="fa fa-tag"></i> Spatial resolution</label>
|
||||
<input type="text" id="node-input-resolution_L" placeholder="#">
|
||||
</div>
|
||||
<div class="form-row PFR">
|
||||
<label for="node-input-dx"><i class="fa fa-tag"></i> dx (length / resolution) [m]</label>
|
||||
<span id="dx-output" style="display: inline-block; padding: 8px; font-weight: bold; color: #333;">--</span>
|
||||
<label for="node-input-dx"><i class="fa fa-tag"></i> Δx (length / resolution) [m]</label>
|
||||
<span id="dx-output" style="display: inline-block; padding: 8px; font-weight: bold;">--</span>
|
||||
</div>
|
||||
<h3> Internal mass transfer calculation (optional) </h3>
|
||||
<div class="form-row">
|
||||
@@ -220,11 +225,6 @@
|
||||
<label for="node-input-X_TS_init"><i class="fa fa-tag"></i> Initial total suspended solids [g TSS m-3]</label>
|
||||
<input type="text" id="node-input-X_TS_init" class="concentrations">
|
||||
</div>
|
||||
<h2> Simulation parameters </h2>
|
||||
<div class="form-row">
|
||||
<label for="node-input-timeStep"><i class="fa fa-tag"></i> Time step [s]</label>
|
||||
<input type="text" id="node-input-timeStep" placeholder="s">
|
||||
</div>
|
||||
|
||||
<!-- Logger fields injected here -->
|
||||
<div id="logger-fields-placeholder"></div>
|
||||
|
||||
Reference in New Issue
Block a user