Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug with check_optimal_termination #3466

Open
MarcusHolly opened this issue Feb 5, 2025 · 0 comments
Open

Bug with check_optimal_termination #3466

MarcusHolly opened this issue Feb 5, 2025 · 0 comments
Labels

Comments

@MarcusHolly
Copy link

MarcusHolly commented Feb 5, 2025

Summary

I am trying to run an initializer that calls check_optimal_termination, but it appears the results object does not have the expected structure.

Steps to reproduce the issue

from pyomo.environ import (
    ConcreteModel,
    SolverFactory,
    units,
)

from idaes.core import FlowsheetBlock

from prommis.leaching.leach_train import LeachingTrain, LeachingTrainInitializer
from prommis.leaching.leach_reactions import CoalRefuseLeachingReactions
from prommis.leaching.leach_solids_properties import CoalRefuseParameters
from prommis.leaching.leach_solution_properties import LeachSolutionParameters

m = ConcreteModel()
m.fs = FlowsheetBlock(dynamic=False)

m.fs.leach_soln = LeachSolutionParameters()
m.fs.coal = CoalRefuseParameters()
m.fs.leach_rxns = CoalRefuseLeachingReactions()

m.fs.leach = LeachingTrain(
    number_of_tanks=1,
    liquid_phase={
        "property_package": m.fs.leach_soln,
        "has_energy_balance": False,
        "has_pressure_balance": False,
    },
    solid_phase={
        "property_package": m.fs.coal,
        "has_energy_balance": False,
        "has_pressure_balance": False,
    },
    reaction_package=m.fs.leach_rxns,
)

m.fs.leach.liquid_inlet.flow_vol.fix(224.3 * units.L / units.hour)
m.fs.leach.liquid_inlet.conc_mass_comp.fix(1e-10 * units.mg / units.L)

m.fs.leach.liquid_inlet.conc_mass_comp[0, "H"].fix(
    2 * 0.05 * 1e3 * units.mg / units.L
)
m.fs.leach.liquid_inlet.conc_mass_comp[0, "HSO4"].fix(1e-8 * units.mg / units.L)
m.fs.leach.liquid_inlet.conc_mass_comp[0, "SO4"].fix(
    0.05 * 96e3 * units.mg / units.L
)

# Solid feed state
m.fs.leach.solid_inlet.flow_mass.fix(22.68 * units.kg / units.hour)
m.fs.leach.solid_inlet.mass_frac_comp[0, "inerts"].fix(0.6952 * units.kg / units.kg)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Al2O3"].fix(0.237 * units.kg / units.kg)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Fe2O3"].fix(0.0642 * units.kg / units.kg)
m.fs.leach.solid_inlet.mass_frac_comp[0, "CaO"].fix(3.31e-3 * units.kg / units.kg)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Sc2O3"].fix(
    2.77966e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Y2O3"].fix(
    3.28653e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "La2O3"].fix(
    6.77769e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Ce2O3"].fix(
    0.000156161 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Pr2O3"].fix(
    1.71438e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Nd2O3"].fix(
    6.76618e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Sm2O3"].fix(
    1.47926e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Gd2O3"].fix(
    1.0405e-05 * units.kg / units.kg
)
m.fs.leach.solid_inlet.mass_frac_comp[0, "Dy2O3"].fix(
    7.54827e-06 * units.kg / units.kg
)

m.fs.leach.volume.fix(100 * units.gallon)

initializer = LeachingTrainInitializer()
initializer.initialize(m.fs.leach)

solver = SolverFactory("ipopt")
solver.solve(m, tee=True)
...

Error Message

2025-02-05 12:13:41 [INFO] idaes.init.fs.leach.mscontactor: Stream Initialization Completed.
2025-02-05 12:13:41 [INFO] idaes.init.fs.leach.mscontactor: Initialization Completed, optimal - <undefined>
Traceback (most recent call last):
  File "C:\GitHub\prommis\prommis\src\prommis\leaching\leach_flowsheet_trimmed.py", line 99, in <module>
    initializer.initialize(m.fs.leach)
  File "C:\Users\mholl\miniconda3\envs\prommis\Lib\site-packages\idaes\core\initialization\initializer_base.py", line 201, in initialize
    return self.postcheck(
           ^^^^^^^^^^^^^^^
  File "C:\Users\mholl\miniconda3\envs\prommis\Lib\site-packages\idaes\core\initialization\initializer_base.py", line 372, in postcheck
    model, "solver_status", check_optimal_termination(results_obj)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\mholl\miniconda3\envs\prommis\Lib\site-packages\pyomo\opt\results\solver.py", line 152, in check_optimal_termination
    if results.solver.status == SolverStatus.ok and (
       ^^^^^^^^^^^^^^
AttributeError: 'InitializationStatus' object has no attribute 'solver'

Process finished with exit code 1

Information on your system

Pyomo version: 6.8.2
Python version: 3.11.9
Operating system: Windows
How Pyomo was installed (PyPI, conda, source): conda
Solver (if applicable): ipopt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant