Fossil Case: Ultra-Supercritical Power Plant

This notebook presents a flowsheet for an ultra-supercritical thermal power plant. The flowsheet is formulated as a simulation model with a turbine capacity of 436 MWe. The model is based on the flowsheet presented in USDOE report #DOE/FE-0400 (1999). A process flow diagram for this plant is given below.

83cfcdf511114fb69cac0ffe5c52596a

In this model, the thermal generator is assumed to use pulverized coal as the fuel. The power plant boiler is modeled as 3 different units boiler (Boiler), reheater 1 (RH1), and reheater 2 (RH2). All unit models used in the flowsheet are from IDAES unit model library. The list of specific unit models used to build the power plant model is tabulated below. More details regarding each unit model and governing equations can be found in its documentation.

IDAES Unit Model

Units in the flowsheet

HelmTurbineStage

Turbine: T1 to T11 and BFPT

HelmSplitter

Turbine Splitters

Heater

Boiler components: Boiler, RH1, & RH2

HelmMixer

Mixers: Condensate Mixer, Deaerator

HelmIsentropicCompressor

Pumps: Condenser Pump, Booster Pump, & BFW Pump

HeatExchanger

Condenser and Feedwater Heaters: FWH1 to FWH9

The model can be accessed from dispatches repo, ultra_supercritical_powerplant.py. The model has 3 degrees of freedom:

  1. Boiler feed water flow: m.fs.boiler.inlet.flow_mol

  2. Boiler outlet pressure: m.fs.boiler.outlet.pressure

  3. Boiler outlet temperature: m.fs.boiler.control_volume.properties_out[0].temperature

In this implementation, the boiler outlet temperature is constrained to be 866 K. To demonstrate the model, first, import all the libraries and packages need for the model

[1]:
import matplotlib.pyplot as plt
from pyomo.environ import value
from idaes.core.solvers.get_solver import get_solver
from idaes.core.util.model_statistics import degrees_of_freedom
from dispatches.case_studies.fossil_case.ultra_supercritical_plant import ultra_supercritical_powerplant as usc

The power plant model uspp contains the methods build_plant_model, which instantiates all the unit models (declare_unit_model), connect them using Arcs (_create_arcs), sets model inputs (set_model_inputs), adds bounds and scaling factors to all variables in the flowsheets. The parameters such as efficiencies of turbines, areas of feedwater heat exchangers, and efficiency for pumps are estimated such that the overall performance of the power plant matches at base load of 436 MW matches to that of the reference report. Fixed pressure drops have been assumed for all units in the flowsheet. In addition, the outlet of condenser is assumed to be saturated liquid. The following operational constraints are added in the model. 1. The power required for all pumps, i.e., booster pump, boiler feedwater pump, and condensate pump, is the same as generated from boiler feedwater turbine. W is power in MWe.

\[\sum(W_{booster pump} + W_{feedwater pump} + W_{condensate pump}) = W_{BFPT}\]
  1. PlantPowerOut is given by the total turbine mechanical work

\[PlantPowerOut = \sum_{Unit}{Unit.MechanicalWork_{t}}\]
  1. PlantHeatDuty is given as the sum of heat duties for Boiler units. Unit is in [Boiler, RH1, RH2]

\[PlantHeatDuty = \sum_{Unit}{Unit.HeatDuty_{t}}\]
[2]:
# Build ultra supercritical power plant model
m = usc.build_plant_model()

Once the model is built, it can be initialized using the initialize method. Degrees of freedom is asserted to be 0 post initialization to ensure a completed model.

[3]:
# Initialize the model (sequencial initialization and custom routines)
usc.initialize(m)

# Ensure after the model is initialized, the degrees of freedom = 0
assert degrees_of_freedom(m) == 0
2022-07-01 18:25:59 [INFO] idaes.init.fs.boiler.control_volume: Initialization Complete
2022-07-01 18:25:59 [INFO] idaes.init.fs.boiler: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.turbine_splitter[1]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.turbine_splitter[2]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.reheater[1].control_volume: Initialization Complete
2022-07-01 18:25:59 [INFO] idaes.init.fs.reheater[1]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.turbine_splitter[3]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.turbine_splitter[4]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.reheater[2].control_volume: Initialization Complete
2022-07-01 18:25:59 [INFO] idaes.init.fs.reheater[2]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:25:59 [INFO] idaes.init.fs.turbine_splitter[5]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.turbine_splitter[6]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.turbine_splitter[7]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.turbine_splitter[8]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.turbine_splitter[9]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.turbine_splitter[10]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.condenser_mix: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:00 [INFO] idaes.init.fs.condenser.control_volume: Initialization Complete
2022-07-01 18:26:00 [INFO] idaes.init.fs.condenser: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh_mixer[1]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[1].shell: Initialization Complete
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[1].tube: Initialization Complete
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[1]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh_mixer[2]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[2].shell: Initialization Complete
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[2].tube: Initialization Complete
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[2]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh_mixer[3]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[3].shell: Initialization Complete
2022-07-01 18:26:01 [INFO] idaes.init.fs.fwh[3].tube: Initialization Complete
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[3]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh_mixer[4]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[4].shell: Initialization Complete
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[4].tube: Initialization Complete
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[4]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[5].shell: Initialization Complete
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[5].tube: Initialization Complete
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[5]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:02 [INFO] idaes.init.fs.deaerator: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh_mixer[6]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[6].shell: Initialization Complete
2022-07-01 18:26:02 [INFO] idaes.init.fs.fwh[6].tube: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[6]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh_mixer[7]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[7].shell: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[7].tube: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[7]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh_mixer[8]: Initialization Complete: optimal - Optimal Solution Found
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[8].shell: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[8].tube: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[8]: Initialization Completed, optimal - Optimal Solution Found
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[9].shell: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[9].tube: Initialization Complete
2022-07-01 18:26:03 [INFO] idaes.init.fs.fwh[9]: Initialization Completed, optimal - Optimal Solution Found
Model Initialization =  optimal
*******************  USC Model Initialized   ********************

Create a solver object with IPOPT solver to solve the intialized model. The feedwater flow and boiler outlet pressure are varied to evaluate the model under off design conditions.

[4]:
# Create the solver object
optarg = {
    "max_iter": 300,
    "halt_on_ampl_error": "yes"
}
solver = get_solver("ipopt", optarg)

Flow vs Power

[5]:
#   Solving the flowsheet and check result
flow_frac_list = [0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
flow = []
power = []
for i in flow_frac_list:
    m.fs.boiler.inlet.flow_mol.fix(i*17854)  # mol/s
    solver.solve(m, tee=True, symbolic_solver_labels=True)
    flow.append(value(m.fs.boiler.inlet.flow_mol[0]))
    power.append(value(m.fs.plant_power_out[0]))
    print('Plant Power (MW) =', value(m.fs.plant_power_out[0]))
    print('Plant Heat Duty (MW) =', value(m.fs.plant_heat_duty[0]))

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(flow, power,
        label='Power [MWe]', color='red')
ax.set_xlabel("Flow [mol/s]", fontsize="xx-large")
ax.set_ylabel("Power [MWe]", fontsize="xx-large")
ax.tick_params(axis='both', which='major', labelsize="xx-large")
ax.tick_params(axis='both', which='minor', labelsize="xx-large")
plt.legend(fontsize="xx-large", loc="upper left")
#plt.show()
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 1.27e+01 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 4.52e-01 1.07e+05  -1.0 2.18e+08    -  3.96e-01 1.00e+00h  1
   2  0.0000000e+00 4.26e-02 4.51e+02  -1.0 4.39e+06    -  9.70e-01 1.00e+00h  1
   3  0.0000000e+00 1.49e-06 2.61e-01  -1.0 3.67e+04    -  9.90e-01 1.00e+00h  1
   4  0.0000000e+00 1.04e-07 5.27e-03  -1.0 1.10e+00    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   4.6566128730773926e-10    1.0430812835693358e-07
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   4.6566128730773926e-10    1.0430812835693358e-07


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.254
Total CPU secs in NLP function evaluations           =      0.470

EXIT: Optimal Solution Found.
Plant Power (MW) = 300.58650317695526
Plant Heat Duty (MW) = 623.9407734256832
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 4.48e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 2.11e-01 1.13e+04  -1.0 7.21e+07    -  3.36e-01 1.00e+00h  1
   2  0.0000000e+00 1.16e-03 1.69e+01  -1.0 5.09e+05    -  9.86e-01 1.00e+00h  1
   3  0.0000000e+00 7.08e-08 3.08e-02  -1.0 9.61e+02    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 3

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   6.5350036493327934e-10    7.0780515670776367e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   6.5350036493327934e-10    7.0780515670776367e-08


Number of objective function evaluations             = 4
Number of objective gradient evaluations             = 4
Number of equality constraint evaluations            = 4
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 4
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 3
Total CPU secs in IPOPT (w/o function evaluations)   =      0.244
Total CPU secs in NLP function evaluations           =      0.241

EXIT: Optimal Solution Found.
Plant Power (MW) = 345.50119892897163
Plant Heat Duty (MW) = 720.56299312392
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 4.40e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 6.19e-02 1.11e+04  -1.0 7.34e+07    -  6.34e-01 1.00e+00h  1
   2  0.0000000e+00 3.01e-04 1.62e+01  -1.0 4.99e+05    -  9.87e-01 1.00e+00h  1
   3  0.0000000e+00 1.79e-07 5.34e-02  -1.0 2.63e+02    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 3

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   4.6566128730773926e-10    1.7881393432617188e-07
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   4.6566128730773926e-10    1.7881393432617188e-07


Number of objective function evaluations             = 4
Number of objective gradient evaluations             = 4
Number of equality constraint evaluations            = 4
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 4
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 3
Total CPU secs in IPOPT (w/o function evaluations)   =      0.240
Total CPU secs in NLP function evaluations           =      0.242

EXIT: Optimal Solution Found.
Plant Power (MW) = 390.7843491331318
Plant Heat Duty (MW) = 818.5585127188042
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 4.32e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 5.53e-02 1.12e+04  -1.0 7.46e+07    -  7.53e-01 1.00e+00h  1
   2  0.0000000e+00 1.08e-04 1.70e+01  -1.0 4.84e+05    -  9.88e-01 1.00e+00h  1
   3  0.0000000e+00 5.22e-08 9.72e-02  -1.0 1.02e+02    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 3

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   1.8626451492309570e-09    5.2154064178466790e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   1.8626451492309570e-09    5.2154064178466790e-08


Number of objective function evaluations             = 4
Number of objective gradient evaluations             = 4
Number of equality constraint evaluations            = 4
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 4
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 3
Total CPU secs in IPOPT (w/o function evaluations)   =      0.339
Total CPU secs in NLP function evaluations           =      0.303

EXIT: Optimal Solution Found.
Plant Power (MW) = 436.46624364773726
Plant Heat Duty (MW) = 917.9305468932873
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 4.24e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 5.02e-02 1.19e+04  -1.0 7.58e+07    -  8.16e-01 1.00e+00h  1
   2  0.0000000e+00 4.63e-05 1.78e+01  -1.0 4.66e+05    -  9.88e-01 1.00e+00h  1
   3  0.0000000e+00 9.69e-08 1.77e-01  -1.0 4.88e+01    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 3

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   4.6566128730773926e-10    9.6857547760009766e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   4.6566128730773926e-10    9.6857547760009766e-08


Number of objective function evaluations             = 4
Number of objective gradient evaluations             = 4
Number of equality constraint evaluations            = 4
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 4
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 3
Total CPU secs in IPOPT (w/o function evaluations)   =      0.282
Total CPU secs in NLP function evaluations           =      0.288

EXIT: Optimal Solution Found.
Plant Power (MW) = 482.5587031324392
Plant Heat Duty (MW) = 1018.6569959430444
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 4.16e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 4.49e-02 1.31e+04  -1.0 7.69e+07    -  8.55e-01 9.90e-01h  1
   2  0.0000000e+00 4.25e-04 1.86e+01  -1.0 9.97e+05    -  9.88e-01 9.90e-01h  1
   3  0.0000000e+00 3.75e-06 1.74e-01  -1.0 9.94e+03    -  9.90e-01 9.91e-01h  1
   4  0.0000000e+00 2.24e-08 5.58e-01  -1.0 8.76e+01    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   4.6566128730773926e-10    2.2351741790771484e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   4.6566128730773926e-10    2.2351741790771484e-08


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.291
Total CPU secs in NLP function evaluations           =      0.332

EXIT: Optimal Solution Found.
Plant Power (MW) = 529.0636966145956
Plant Heat Duty (MW) = 1120.7016644542393
[5]:
<matplotlib.legend.Legend at 0x7f0c25653e80>
../_images/examples_ultrasupercritical_power_plant_14_2.png

Pressure vs Power

[6]:
#   Solving the flowsheet and check result
pres_frac_list = [0.8, 0.9, 1.0, 1.1, 1.2]
pressure = []
power2 = []
for i in flow_frac_list:
    m.fs.boiler.inlet.flow_mol.fix(17854)  # mol/s
    m.fs.boiler.outlet.pressure.fix(i*31125980)
    solver.solve(m, tee=True, symbolic_solver_labels=True)
    pressure.append(value(m.fs.boiler.outlet.pressure[0])*1e-6)
    power2.append(value(m.fs.plant_power_out[0]))
    print('Plant Power (MW) =', value(m.fs.plant_power_out[0]))
    print('Plant Heat Duty (MW) =', value(m.fs.plant_heat_duty[0]))

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(flow, power,
        label='Power [MWe]', color='red')
ax.set_xlabel("Pressure [MPa]", fontsize="xx-large")
ax.set_ylabel("Power [MWe]", fontsize="xx-large")
ax.tick_params(axis='both', which='major', labelsize="xx-large")
ax.tick_params(axis='both', which='minor', labelsize="xx-large")
plt.legend(fontsize="xx-large", loc="upper left")
#plt.show()
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 3.06e+01 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 6.28e+01 1.11e+04  -1.0 1.09e+08    -  5.94e-02 4.40e-01F  1
   2  0.0000000e+00 3.61e-01 1.08e+03  -1.0 5.85e+07    -  1.14e-02 1.00e+00H  1
   3  0.0000000e+00 8.75e-02 7.18e+02  -1.0 1.64e+06    -  8.27e-01 1.00e+00h  1
   4  0.0000000e+00 3.45e-06 8.39e-02  -1.0 7.46e+04    -  9.89e-01 1.00e+00h  1
   5  0.0000000e+00 8.94e-08 2.73e-03  -1.0 2.83e+00    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 5

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   1.8626451492309570e-09    8.9406967163085938e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   1.8626451492309570e-09    8.9406967163085938e-08


Number of objective function evaluations             = 8
Number of objective gradient evaluations             = 6
Number of equality constraint evaluations            = 8
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 6
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 5
Total CPU secs in IPOPT (w/o function evaluations)   =      0.232
Total CPU secs in NLP function evaluations           =      1.162

EXIT: Optimal Solution Found.
Plant Power (MW) = 458.5647401954766
Plant Heat Duty (MW) = 970.5861529522479
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 9.87e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 3.82e+01 2.39e+02  -1.0 1.26e+07    -  2.63e-01 1.00e+00h  1
   2  0.0000000e+00 8.53e-01 3.75e+02  -1.0 8.23e+06    -  6.83e-01 1.00e+00h  1
   3  0.0000000e+00 3.65e-04 1.79e+00  -1.0 7.21e+05    -  9.70e-01 1.00e+00h  1
   4  0.0000000e+00 6.71e-08 9.63e-02  -1.0 3.22e+02    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   1.8626451492309570e-09    6.7055225372314453e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   1.8626451492309570e-09    6.7055225372314453e-08


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.299
Total CPU secs in NLP function evaluations           =      0.651

EXIT: Optimal Solution Found.
Plant Power (MW) = 451.12383724974603
Plant Heat Duty (MW) = 952.2672510786463
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 9.64e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 2.93e+01 1.85e+00  -1.0 9.67e+06    -  8.57e-01 1.00e+00h  1
   2  0.0000000e+00 8.67e-02 1.57e+01  -1.0 1.01e+07    -  7.06e-01 1.00e+00h  1
   3  0.0000000e+00 2.14e-06 2.29e-01  -1.0 7.86e+04    -  9.90e-01 1.00e+00h  1
   4  0.0000000e+00 2.98e-08 6.29e-05  -1.0 1.09e+00    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   3.4924596548080444e-10    2.9802322387695312e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   3.4924596548080444e-10    2.9802322387695312e-08


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.273
Total CPU secs in NLP function evaluations           =      0.670

EXIT: Optimal Solution Found.
Plant Power (MW) = 443.7672298097435
Plant Heat Duty (MW) = 934.786503777763
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 9.39e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 2.33e+01 3.35e+01  -1.0 1.30e+07    -  7.10e-01 1.00e+00h  1
   2  0.0000000e+00 6.50e-02 1.06e+02  -1.0 6.18e+06    -  7.94e-01 1.00e+00h  1
   3  0.0000000e+00 3.18e-06 3.63e-01  -1.0 8.85e+04    -  9.90e-01 1.00e+00h  1
   4  0.0000000e+00 7.45e-08 5.20e-03  -1.0 2.36e+00    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   4.6566128730773926e-10    7.4505805969238294e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   4.6566128730773926e-10    7.4505805969238294e-08


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.386
Total CPU secs in NLP function evaluations           =      0.885

EXIT: Optimal Solution Found.
Plant Power (MW) = 436.4662436477347
Plant Heat Duty (MW) = 917.9305468932863
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 9.13e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 1.90e+01 1.22e+02  -1.0 1.22e+07    -  3.23e-01 1.00e+00h  1
   2  0.0000000e+00 5.23e-01 1.52e+02  -1.0 6.58e+06    -  7.91e-01 1.00e+00h  1
   3  0.0000000e+00 1.34e-04 1.28e+00  -1.0 4.40e+05    -  9.79e-01 1.00e+00h  1
   4  0.0000000e+00 8.94e-08 6.58e-02  -1.0 1.20e+02    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   5.8207660913467407e-10    8.9406967163085938e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   5.8207660913467407e-10    8.9406967163085938e-08


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.371
Total CPU secs in NLP function evaluations           =      0.857

EXIT: Optimal Solution Found.
Plant Power (MW) = 429.1979916564438
Plant Heat Duty (MW) = 901.5421185699863
Ipopt 3.13.2: nlp_scaling_method=gradient-based
tol=1e-06
max_iter=300
halt_on_ampl_error=yes


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt

This version of Ipopt was compiled from source code available at
    https://github.com/IDAES/Ipopt as part of the Institute for the Design of
    Advanced Energy Systems Process Systems Engineering Framework (IDAES PSE
    Framework) Copyright (c) 2018-2019. See https://github.com/IDAES/idaes-pse.

This version of Ipopt was compiled using HSL, a collection of Fortran codes
    for large-scale scientific computation.  All technical papers, sales and
    publicity material resulting from use of the HSL codes within IPOPT must
    contain the following acknowledgement:
        HSL, a collection of Fortran codes for large-scale scientific
        computation. See http://www.hsl.rl.ac.uk.
******************************************************************************

This is Ipopt version 3.13.2, running with linear solver ma27.

Number of nonzeros in equality constraint Jacobian...:     1354
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:      389

Total number of variables............................:      513
                     variables with only lower bounds:        0
                variables with lower and upper bounds:      368
                     variables with only upper bounds:        0
Total number of equality constraints.................:      513
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  0.0000000e+00 8.85e+00 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  0.0000000e+00 4.88e+00 8.75e+01  -1.0 1.49e+07    -  8.95e-01 5.51e-01h  1
   2  0.0000000e+00 2.94e+00 6.42e+03  -1.0 6.41e+06    -  5.70e-03 1.00e+00f  1
   3  0.0000000e+00 1.09e-02 4.56e+02  -1.0 3.60e+06    -  9.23e-01 1.00e+00h  1
   4  0.0000000e+00 8.88e-08 1.09e-01  -1.0 8.63e+03    -  9.90e-01 1.00e+00h  1

Number of Iterations....: 4

                                   (scaled)                 (unscaled)
Objective...............:   0.0000000000000000e+00    0.0000000000000000e+00
Dual infeasibility......:   0.0000000000000000e+00    0.0000000000000000e+00
Constraint violation....:   8.8754423366310675e-08    8.8754423366310675e-08
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   8.8754423366310675e-08    8.8754423366310675e-08


Number of objective function evaluations             = 5
Number of objective gradient evaluations             = 5
Number of equality constraint evaluations            = 5
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 5
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 4
Total CPU secs in IPOPT (w/o function evaluations)   =      0.370
Total CPU secs in NLP function evaluations           =      0.872

EXIT: Optimal Solution Found.
Plant Power (MW) = 421.94491539905306
Plant Heat Duty (MW) = 885.502147854769
[6]:
<matplotlib.legend.Legend at 0x7f0c255fbf10>
../_images/examples_ultrasupercritical_power_plant_16_2.png