Summary
This experiment investigates seawater desalination efficiency. Central composite design to maximize freshwater recovery and minimize energy use by tuning membrane pressure, feed temperature, and recovery ratio.
The design varies 3 factors: pressure bar (bar), ranging from 50 to 70, feed temp c (C), ranging from 15 to 30, and recovery pct (%), ranging from 35 to 55. The goal is to optimize 2 responses: permeate lmh (L/m2/hr) (maximize) and sec kwh m3 (kWh/m3) (minimize). Fixed conditions held constant across all runs include membrane = RO_polyamide, salinity = 35000ppm.
A Central Composite Design (CCD) was selected to fit a full quadratic response surface model, including curvature and interaction effects. With 3 factors this produces 22 runs including center points and axial (star) points that extend beyond the factorial range.
Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.
Key Findings
For permeate lmh, the most influential factors were feed temp c (55.3%), recovery pct (25.3%), pressure bar (19.4%). The best observed value was 34.3 (at pressure bar = 60, feed temp c = 22.5, recovery pct = 45).
For sec kwh m3, the most influential factors were pressure bar (42.4%), recovery pct (32.8%), feed temp c (24.8%). The best observed value was 2.67 (at pressure bar = 70, feed temp c = 30, recovery pct = 55).
Recommended Next Steps
- Run confirmation experiments at the predicted optimal settings to validate the model.
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
pressure_bar | 50 | 70 | bar |
feed_temp_c | 15 | 30 | C |
recovery_pct | 35 | 55 | % |
Fixed: membrane = RO_polyamide, salinity = 35000ppm
Responses
| Response | Direction | Unit |
permeate_lmh | ↑ maximize | L/m2/hr |
sec_kwh_m3 | ↓ minimize | kWh/m3 |
Configuration
{
"metadata": {
"name": "Seawater Desalination Efficiency",
"description": "Central composite design to maximize freshwater recovery and minimize energy use by tuning membrane pressure, feed temperature, and recovery ratio"
},
"factors": [
{
"name": "pressure_bar",
"levels": [
"50",
"70"
],
"type": "continuous",
"unit": "bar"
},
{
"name": "feed_temp_c",
"levels": [
"15",
"30"
],
"type": "continuous",
"unit": "C"
},
{
"name": "recovery_pct",
"levels": [
"35",
"55"
],
"type": "continuous",
"unit": "%"
}
],
"fixed_factors": {
"membrane": "RO_polyamide",
"salinity": "35000ppm"
},
"responses": [
{
"name": "permeate_lmh",
"optimize": "maximize",
"unit": "L/m2/hr"
},
{
"name": "sec_kwh_m3",
"optimize": "minimize",
"unit": "kWh/m3"
}
],
"settings": {
"operation": "central_composite",
"test_script": "use_cases/252_seawater_desalination/sim.sh"
}
}
Experimental Matrix
The Central Composite Design produces 22 runs. Each row is one experiment with specific factor settings.
| Run | pressure_bar | feed_temp_c | recovery_pct |
| 1 | 60 | 22.5 | 45 |
| 2 | 70 | 15 | 55 |
| 3 | 50 | 30 | 35 |
| 4 | 60 | 36.1931 | 45 |
| 5 | 60 | 22.5 | 45 |
| 6 | 41.7426 | 22.5 | 45 |
| 7 | 60 | 22.5 | 26.7426 |
| 8 | 60 | 22.5 | 45 |
| 9 | 70 | 30 | 35 |
| 10 | 78.2574 | 22.5 | 45 |
| 11 | 60 | 22.5 | 45 |
| 12 | 60 | 8.80694 | 45 |
| 13 | 60 | 22.5 | 45 |
| 14 | 50 | 15 | 55 |
| 15 | 60 | 22.5 | 45 |
| 16 | 70 | 15 | 35 |
| 17 | 60 | 22.5 | 63.2574 |
| 18 | 70 | 30 | 55 |
| 19 | 60 | 22.5 | 45 |
| 20 | 50 | 15 | 35 |
| 21 | 50 | 30 | 55 |
| 22 | 60 | 22.5 | 45 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/252_seawater_desalination/config.json
2
Generate the runner script
$ doe generate --config use_cases/252_seawater_desalination/config.json \
--output use_cases/252_seawater_desalination/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/252_seawater_desalination/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/252_seawater_desalination/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/252_seawater_desalination/config.json
6
Multi-objective optimization
With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.
$ doe optimize --config use_cases/252_seawater_desalination/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/252_seawater_desalination/config.json \
--output use_cases/252_seawater_desalination/results/report.html
Features Exercised
| Feature | Value |
| Design type | central_composite |
| Factor types | continuous (all 3) |
| Arg style | double-dash |
| Responses | 2 (permeate_lmh ↑, sec_kwh_m3 ↓) |
| Total runs | 22 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: permeate_lmh
Top factors: feed_temp_c (55.3%), recovery_pct (25.3%), pressure_bar (19.4%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| pressure_bar | 4 | 69.0886 | 17.2722 | 0.509 | 0.7309 |
| feed_temp_c | 4 | 241.4120 | 60.3530 | 1.779 | 0.2171 |
| recovery_pct | 4 | 108.6636 | 27.1659 | 0.801 | 0.5542 |
| Lack | of | Fit | 2 | 206.2444 | 103.1222 |
| Pure | Error | 7 | 237.4750 | | |
| Error | 9 | 443.7194 | 33.9250 | | |
| Total | 21 | 862.8836 | 41.0897 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: sec_kwh_m3
Top factors: pressure_bar (42.4%), recovery_pct (32.8%), feed_temp_c (24.8%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| pressure_bar | 4 | 3.4880 | 0.8720 | 0.840 | 0.5331 |
| feed_temp_c | 4 | 1.2479 | 0.3120 | 0.301 | 0.8703 |
| recovery_pct | 4 | 2.7279 | 0.6820 | 0.657 | 0.6367 |
| Lack | of | Fit | 2 | 2.5151 | 1.2575 |
| Pure | Error | 7 | 7.2628 | | |
| Error | 9 | 9.7779 | 1.0375 | | |
| Total | 21 | 17.2417 | 0.8210 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response Surface Plots
3D surfaces fitted with quadratic RSM. Red dots are observed data points.
permeate lmh feed temp c vs recovery pct
permeate lmh pressure bar vs feed temp c
permeate lmh pressure bar vs recovery pct
sec kwh m3 feed temp c vs recovery pct
sec kwh m3 pressure bar vs feed temp c
sec kwh m3 pressure bar vs recovery pct
Multi-Objective Optimization
When responses compete, Derringer–Suich desirability finds the best compromise.
Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.
Overall Desirability
D = 0.8931
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
permeate_lmh |
1.5 |
|
34.30 0.9545 34.30 L/m2/hr |
↑ |
sec_kwh_m3 |
1.0 |
|
3.19 0.8082 3.19 kWh/m3 |
↓ |
Recommended Settings
| Factor | Value |
pressure_bar | 60 bar |
feed_temp_c | 8.80694 C |
recovery_pct | 45 % |
Source: from observed run #9
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
sec_kwh_m3 | 3.19 | 2.67 | +0.52 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #4 | 0.7891 | pressure_bar=60, feed_temp_c=22.5, recovery_pct=45 |
| #7 | 0.7663 | pressure_bar=70, feed_temp_c=15, recovery_pct=55 |
Model Quality
| Response | R² | Type |
sec_kwh_m3 | 0.7510 | quadratic |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.8931
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
permeate_lmh 1.5 0.9545 34.30 L/m2/hr ↑
sec_kwh_m3 1.0 0.8082 3.19 kWh/m3 ↓
Recommended settings:
pressure_bar = 60 bar
feed_temp_c = 8.80694 C
recovery_pct = 45 %
(from observed run #9)
Trade-off summary:
permeate_lmh: 34.30 (best observed: 34.30, sacrifice: +0.00)
sec_kwh_m3: 3.19 (best observed: 2.67, sacrifice: +0.52)
Model quality:
permeate_lmh: R² = 0.2006 (linear)
sec_kwh_m3: R² = 0.7510 (quadratic)
Top 3 observed runs by overall desirability:
1. Run #9 (D=0.8931): pressure_bar=60, feed_temp_c=8.80694, recovery_pct=45
2. Run #4 (D=0.7891): pressure_bar=60, feed_temp_c=22.5, recovery_pct=45
3. Run #7 (D=0.7663): pressure_bar=70, feed_temp_c=15, recovery_pct=55
Full Analysis Output
=== Main Effects: permeate_lmh ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
feed_temp_c 20.6000 1.3666 55.3%
recovery_pct 9.4000 1.3666 25.3%
pressure_bar 7.2250 1.3666 19.4%
=== ANOVA Table: permeate_lmh ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
pressure_bar 4 69.0886 17.2722 0.509 0.7309
feed_temp_c 4 241.4120 60.3530 1.779 0.2171
recovery_pct 4 108.6636 27.1659 0.801 0.5542
Lack of Fit 2 206.2444 103.1222 3.040 0.1121
Pure Error 7 237.4750 33.9250
Error 9 443.7194 33.9250
Total 21 862.8836 41.0897
=== Summary Statistics: permeate_lmh ===
pressure_bar:
Level N Mean Std Min Max
------------------------------------------------------------
41.7426 1 20.7000 0.0000 20.7000 20.7000
50 4 18.6750 7.8453 8.3000 24.9000
60 12 22.7000 6.7289 10.1000 34.3000
70 4 22.7250 6.0852 13.7000 27.0000
78.2574 1 25.9000 0.0000 25.9000 25.9000
feed_temp_c:
Level N Mean Std Min Max
------------------------------------------------------------
15 4 21.3750 8.7641 8.3000 27.0000
22.5 12 22.5833 5.1924 10.1000 27.7000
30 4 20.0250 5.6115 13.7000 24.9000
36.1931 1 13.7000 0.0000 13.7000 13.7000
8.80694 1 34.3000 0.0000 34.3000 34.3000
recovery_pct:
Level N Mean Std Min Max
------------------------------------------------------------
26.7426 1 18.0000 0.0000 18.0000 18.0000
35 4 23.0000 4.0710 16.9000 25.3000
45 12 22.8000 6.5227 10.1000 34.3000
55 4 18.4000 8.8788 8.3000 27.0000
63.2574 1 27.4000 0.0000 27.4000 27.4000
=== Main Effects: sec_kwh_m3 ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
pressure_bar 1.8300 0.1932 42.4%
recovery_pct 1.4150 0.1932 32.8%
feed_temp_c 1.0700 0.1932 24.8%
=== ANOVA Table: sec_kwh_m3 ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
pressure_bar 4 3.4880 0.8720 0.840 0.5331
feed_temp_c 4 1.2479 0.3120 0.301 0.8703
recovery_pct 4 2.7279 0.6820 0.657 0.6367
Lack of Fit 2 2.5151 1.2575 1.212 0.3532
Pure Error 7 7.2628 1.0375
Error 9 9.7779 1.0375
Total 21 17.2417 0.8210
=== Summary Statistics: sec_kwh_m3 ===
pressure_bar:
Level N Mean Std Min Max
------------------------------------------------------------
41.7426 1 2.6700 0.0000 2.6700 2.6700
50 4 3.5475 0.3465 3.1600 3.9900
60 12 3.7900 0.9046 2.8700 5.8500
70 4 4.5000 1.2099 3.4300 5.9000
78.2574 1 3.7300 0.0000 3.7300 3.7300
feed_temp_c:
Level N Mean Std Min Max
------------------------------------------------------------
15 4 3.7875 0.8978 3.1600 5.1200
22.5 12 3.7458 0.9474 2.6700 5.8500
30 4 4.2600 1.1109 3.5500 5.9000
36.1931 1 3.7400 0.0000 3.7400 3.7400
8.80694 1 3.1900 0.0000 3.1900 3.1900
recovery_pct:
Level N Mean Std Min Max
------------------------------------------------------------
26.7426 1 3.2300 0.0000 3.2300 3.2300
35 4 3.6025 0.2640 3.4300 3.9900
45 12 3.8017 0.9228 2.6700 5.8500
55 4 4.4450 1.2830 3.1600 5.9000
63.2574 1 3.0300 0.0000 3.0300 3.0300
Optimization Recommendations
=== Optimization: permeate_lmh ===
Direction: maximize
Best observed run: #9
pressure_bar = 60
feed_temp_c = 22.5
recovery_pct = 45
Value: 34.3
RSM Model (linear, R² = 0.0826, Adj R² = -0.0703):
Coefficients:
intercept +22.0273
pressure_bar +0.2870
feed_temp_c -1.4249
recovery_pct -1.6570
RSM Model (quadratic, R² = 0.3115, Adj R² = -0.2048):
Coefficients:
intercept +24.2668
pressure_bar +0.2870
feed_temp_c -1.4249
recovery_pct -1.6570
pressure_bar*feed_temp_c -3.0500
pressure_bar*recovery_pct +1.2500
feed_temp_c*recovery_pct +1.2750
pressure_bar^2 -1.8647
feed_temp_c^2 -1.3397
recovery_pct^2 -0.1547
Curvature analysis:
pressure_bar coef=-1.8647 concave (has a maximum)
feed_temp_c coef=-1.3397 concave (has a maximum)
recovery_pct coef=-0.1547 concave (has a maximum)
Notable interactions:
pressure_bar*feed_temp_c coef=-3.0500 (antagonistic)
feed_temp_c*recovery_pct coef=+1.2750 (synergistic)
pressure_bar*recovery_pct coef=+1.2500 (synergistic)
Predicted optimum (from linear model, at observed points):
pressure_bar = 70
feed_temp_c = 15
recovery_pct = 35
Predicted value: 25.3962
Surface optimum (via L-BFGS-B, linear model):
pressure_bar = 70
feed_temp_c = 15
recovery_pct = 35
Predicted value: 25.3962
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. feed_temp_c (effect: 17.8, contribution: 50.6%)
2. pressure_bar (effect: 10.7, contribution: 30.4%)
3. recovery_pct (effect: 6.7, contribution: 19.0%)
=== Optimization: sec_kwh_m3 ===
Direction: minimize
Best observed run: #3
pressure_bar = 70
feed_temp_c = 30
recovery_pct = 55
Value: 2.67
RSM Model (linear, R² = 0.1461, Adj R² = 0.0038):
Coefficients:
intercept +3.8214
pressure_bar -0.0967
feed_temp_c -0.3912
recovery_pct -0.0965
RSM Model (quadratic, R² = 0.5891, Adj R² = 0.2810):
Coefficients:
intercept +3.7425
pressure_bar -0.0967
feed_temp_c -0.3912
recovery_pct -0.0965
pressure_bar*feed_temp_c +0.1263
pressure_bar*recovery_pct -0.2038
feed_temp_c*recovery_pct -0.2162
pressure_bar^2 +0.4644
feed_temp_c^2 -0.0471
recovery_pct^2 -0.2991
Curvature analysis:
pressure_bar coef=+0.4644 convex (has a minimum)
recovery_pct coef=-0.2991 concave (has a maximum)
feed_temp_c coef=-0.0471 negligible curvature
Predicted optimum (from quadratic model, at observed points):
pressure_bar = 41.7426
feed_temp_c = 22.5
recovery_pct = 45
Predicted value: 5.4672
Surface optimum (via L-BFGS-B, quadratic model):
pressure_bar = 61.8758
feed_temp_c = 30
recovery_pct = 55
Predicted value: 2.6761
Model quality: Moderate fit — use predictions directionally, not precisely.
Factor importance:
1. pressure_bar (effect: 2.7, contribution: 47.2%)
2. feed_temp_c (effect: 2.1, contribution: 35.9%)
3. recovery_pct (effect: 1.0, contribution: 16.9%)