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

PETSc errors on macOS 15.1 #1536

Open
lbianchi-lbl opened this issue Nov 14, 2024 · 0 comments
Open

PETSc errors on macOS 15.1 #1536

lbianchi-lbl opened this issue Nov 14, 2024 · 0 comments
Assignees
Labels

Comments

@lbianchi-lbl
Copy link
Contributor

lbianchi-lbl commented Nov 14, 2024

Originally reported by @fahim831 in watertap-org/watertap#1523

Symptoms

2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: WARNING: model contains export suffix 'scaling_factor' that contains 22
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: component keys that are not exported as part of the NL file.  Skipping.
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Called fg_read, err: 0 (0 is good)
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: ---------------------------------------------------
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: DAE: 1
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Reading nl file: /var/folders/76/5rvzy41s10bbm5rpz0gq9gjw0000gp/T/tmpg408nnfu.pyomo.nl
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of constraints: 205
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of nonlinear constraints: 112
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of linear constraints: 93
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of inequalities: 0
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of variables: 211
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of integers: 0
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of binary: 0
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of objectives: 0 (Ignoring)
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of non-zeros in Jacobian: 548 
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Explicit time variable: 0
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of derivatives: 6
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of differential vars: 6
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of algebraic vars: 199
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of state vars: 205
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: Number of degrees of freedom: 0
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: ---------------------------------------------------
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: [0]PETSC ERROR: Argument out of range
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: [0]PETSC ERROR: Input string 20>o has no integer value (do not include . in it)
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: [0]PETSC ERROR: WARNING! There are option(s) set that were not used! Could be the program crashed before they were used or a spelling mistake, etc!
2024-11-12 19:44:41 [INFO] idaes.solve.petsc-dae: [0]PETSC ERROR:   Option left: name:-ts_adapt_type value: basic source: command line
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: [0]PETSC ERROR:   Option left: name:-ts_max_snes_failuresdERROR: Stream handle closed with un-decoded characters in the decoder buffer
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: that was not emitted to the output stream(s):
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: b'\x820XiLo\xfe\xc31n\xa1\x1c\xb2\xfa</eY\x01b1\x82\xaa=o\x01 value: 200
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: source: command line\n[0]PETSC ERROR:   Option left: name:-ts_monitor (no
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: value) source: command line\n[0]PETSC ERROR:   Option left:
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: name:-ts_save_trajectory value: 1 source: command line\n[0]PETSC ERROR:
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: Option left: name:-ts_trajectory_type value: visualization source: command
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: line\n[0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: shooting.\n[0]PETSC ERROR: Petsc Release Version 3.19.2, Jun 01, 2023
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: \n[0]PETSC ERROR: /Users/fya/.idaes/bin/petsc on a  named mac141200 by fya Tue
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: Nov 12 19:44:41 2024\n[0]PETSC ERROR: Configure options --force --with-
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: debugging=0 --with-shared-libraries=0 --with-mpi=0 --with-fortran-bindings=0
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: --download-metis --download-mumps --with-mumps-serial=1
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: --prefix=/Users/johneslick/src/petsc-dist\n[0]PETSC ERROR: #1
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: PetscOptionsStringToInt() at
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: /Users/johneslick/src/petsc-3.19.2/src/sys/objects/options.c:2244\n[0]PETSC
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: #2 PetscOptionsGetInt() at
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: /Users/johneslick/src/petsc-3.19.2/src/sys/objects/options.c:2580\n[0]PETSC
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: #3 PetscOptionsInt_Private() at
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: /Users/johneslick/src/petsc-3.19.2/src/sys/objects/aoptions.c:901\n[0]PETSC
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: #4 TSSetFromOptions() at
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: /Users/johneslick/src/petsc-3.19.2/src/ts/interface/ts.c:124\n[0]PETSC ERROR:
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: #5 main() at /Users/johneslick/src/idaes-ext-build/petsc/petsc.c:256\n[0]PETSC
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: PETSc Option Table entries:\n[0]PETSC ERROR: -AMPL (source: command
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: line)\n[0]PETSC ERROR: -dae_solve (source: command line)\n[0]PETSC ERROR:
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: -ts_adapt_type basic (source: command line)\n[0]PETSC ERROR:
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: -ts_exact_final_time matchstep (source: command line)\n[0]PETSC ERROR:
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: -ts_init_time 0.0 (source: command line)\n[0]PETSC ERROR: -ts_max_reject
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: 20>o\x01 (source: command line)\n[0]PETSC ERROR: -ts_max_snes_failuresd\x820Xi
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: Lo\xfe\xc31n\xa1\x1c\xb2\xfa</eY\x01b1\x82\xaa=o\x01 200 (source: command
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: line)\n[0]PETSC ERROR: -ts_max_time 7.0 (source: command line)\n[0]PETSC
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: -ts_monitor (source: command line)\n[0]PETSC ERROR: -ts_save_trajectory
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: 1 (source: command line)\n[0]PETSC ERROR: -ts_trajectory_type visualization
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: (source: command line)\n[0]PETSC ERROR: -ts_type beuler (source: command
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: line)\n[0]PETSC ERROR: ----------------End of Error Message -------send entire
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: error message to petsc-maint@mcs.anl.gov----------\n'
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: Solver (asl) returned non-zero return code (-6)
2024-11-12 19:44:42 [INFO] idaes.solve.petsc-dae: ERROR: See the solver log above for diagnostic information.
Traceback (most recent call last):
  File "/Users/fya/Documents/GitHub/watertap/watertap/flowsheets/ccro/CCRO_dynamic.py", line 412, in <module>
    m = main()
  File "/Users/fya/Documents/GitHub/watertap/watertap/flowsheets/ccro/CCRO_dynamic.py", line 62, in main
    solve_dynamic(m)
  File "/Users/fya/Documents/GitHub/watertap/watertap/flowsheets/ccro/CCRO_dynamic.py", line 329, in solve_dynamic
    results = petsc.petsc_dae_by_time_element(
  File "/opt/anaconda3/envs/watertap-dev/lib/python3.8/site-packages/idaes/core/solvers/petsc.py", line 640, in petsc_dae_by_time_element
    res = solver_dae.solve(
  File "/opt/anaconda3/envs/watertap-dev/lib/python3.8/site-packages/pyomo/opt/base/solvers.py", line 628, in solve
    raise ApplicationError("Solver (%s) did not exit normally" % self.name)
pyomo.common.errors.ApplicationError: Solver (asl) did not exit normally

Possible causes

  • At the moment, my best uneducated guess is that this might be a regression introduced by the macOS 15.1 update

Reproducing the error

The following script, adapted from the example in IDAES/examples, should be enough to trigger the error:

import numpy as np

import pyomo.dae as pyodae
import pyomo.environ as pyo
import idaes.core.solvers.petsc as petsc  # petsc utilities module
# from idaes.core.solvers.features import dae  # DAE example/test problem

def dae(nfe=1):
    """This provides a DAE model for solver testing.

    The problem and expected result are from the problem given here:
    https://archimede.dm.uniba.it/~testset/report/chemakzo.pdf.

    Args:
        None

    Returns:
        (tuple): Pyomo ConcreteModel, correct solved value for y[1] to y[5] and y6
    """
    model = pyo.ConcreteModel(name="chemakzo")

    # Set problem parameter values
    model.k = pyo.Param([1, 2, 3, 4], initialize={1: 18.7, 2: 0.58, 3: 0.09, 4: 0.42})
    model.Ke = pyo.Param(initialize=34.4)
    model.klA = pyo.Param(initialize=3.3)
    model.Ks = pyo.Param(initialize=115.83)
    model.pCO2 = pyo.Param(initialize=0.9)
    model.H = pyo.Param(initialize=737)

    # Problem variables ydot = dy/dt,
    #    (dy6/dt is not explicitly in the equations, so only 5 ydots i.e.
    #    y6 is an algebraic variable and y1 to y5 are differential variables)
    model.t = pyodae.ContinuousSet(bounds=(0, 180))
    model.y = pyo.Var(model.t, [1, 2, 3, 4, 5], initialize=1.0)  #
    model.y6 = pyo.Var(model.t, initialize=1.0)  #
    model.ydot = pyodae.DerivativeVar(model.y, wrt=model.t)  # dy/dt
    model.r = pyo.Var(model.t, [1, 2, 3, 4, 5], initialize=1.0)
    model.Fin = pyo.Var(model.t, initialize=1.0)

    # Equations
    @model.Constraint(model.t)
    def eq_ydot1(b, t):
        return b.ydot[t, 1] == -2.0 * b.r[t, 1] + b.r[t, 2] - b.r[t, 3] - b.r[t, 4]

    @model.Constraint(model.t)
    def eq_ydot2(b, t):
        return b.ydot[t, 2] == -0.5 * b.r[t, 1] - b.r[t, 4] - 0.5 * b.r[t, 5] + b.Fin[t]

    @model.Constraint(model.t)
    def eq_ydot3(b, t):
        return b.ydot[t, 3] == b.r[t, 1] - b.r[t, 2] + b.r[t, 3]

    @model.Constraint(model.t)
    def eq_ydot4(b, t):
        return b.ydot[t, 4] == -b.r[t, 2] + b.r[t, 3] - 2.0 * b.r[t, 4]

    @model.Constraint(model.t)
    def eq_ydot5(b, t):
        return b.ydot[t, 5] == b.r[t, 2] - b.r[t, 3] + b.r[t, 5]

    @model.Constraint(model.t)
    def eq_y6(b, t):
        return 0 == b.Ks * b.y[t, 1] * b.y[t, 4] - b.y6[t]

    @model.Constraint(model.t)
    def eq_r1(b, t):
        return b.r[t, 1] == b.k[1] * b.y[t, 1] ** 4 * b.y[t, 2] ** 0.5

    @model.Constraint(model.t)
    def eq_r2(b, t):
        return b.r[t, 2] == b.k[2] * b.y[t, 3] * b.y[t, 4]

    @model.Constraint(model.t)
    def eq_r3(b, t):
        return b.r[t, 3] == b.k[2] / b.Ke * b.y[t, 1] * b.y[t, 5]

    @model.Constraint(model.t)
    def eq_r4(b, t):
        return b.r[t, 4] == b.k[3] * b.y[t, 1] * b.y[t, 4] ** 2

    @model.Constraint(model.t)
    def eq_r5(b, t):
        return b.r[t, 5] == b.k[4] * b.y6[t] ** 2 * b.y[t, 2] ** 0.5

    @model.Constraint(model.t)
    def eq_Fin(b, t):
        return b.Fin[t] == b.klA * (b.pCO2 / b.H - b.y[t, 2])

    # Set initial conditions and solve initial from the values of differential
    # variables.
    y0 = {1: 0.444, 2: 0.00123, 3: 0.0, 4: 0.007, 5: 0.0}  # initial differential vars
    for i, v in y0.items():
        model.y[0, i].fix(v)

    discretizer = pyo.TransformationFactory("dae.finite_difference")
    discretizer.apply_to(model, nfe=nfe, scheme="BACKWARD")

    return (
        model,
        0.1150794920661702,
        0.1203831471567715e-2,
        0.1611562887407974,
        0.3656156421249283e-3,
        0.1708010885264404e-1,
        0.4873531310307455e-2,
    )

# Get the model and known solution for y variables at t=180 minutes.
m, y1, y2, y3, y4, y5, y6 = dae(nfe=10)

# See the initial conditions:
print("at t = 0:")
print(f"    y1 = {pyo.value(m.y[0, 1])}")
print(f"    y2 = {pyo.value(m.y[0, 2])}")
print(f"    y3 = {pyo.value(m.y[0, 3])}")
print(f"    y4 = {pyo.value(m.y[0, 4])}")
print(f"    y5 = {pyo.value(m.y[0, 5])}")

# The command below will solve the problem.  In this case, we want to read the saved
# trajectory for each time element in the Pyomo.DAE problem (in this case there is
# only 1) so we will need to provide solver options to save the trajectory to the PETSc
# solver, a file name stub for variable information files, and a file stub for saving
# the trajectory information.  The options shown below will delete the trajectory
# information written by PETSc and resave it as json.  This allows us to cleanly read
# the trajectory data for multiple time elements.

result = petsc.petsc_dae_by_time_element(
    m,
    time=m.t,
    between=[m.t.first(), m.t.last()],
    ts_options={
        "--ts_type": "cn",  # Crank–Nicolson
        "--ts_adapt_type": "basic",
        "--ts_dt": 0.01,
        "--ts_save_trajectory": 1,
    },
)
tj = result.trajectory
res = result.results
@lbianchi-lbl lbianchi-lbl changed the title PETSc error on macOS 15.1 PETSc errors on macOS 15.1 Nov 14, 2024
@ksbeattie ksbeattie added WaterTAP Priority:Normal Normal Priority Issue or PR Priority:High High Priority Issue or PR and removed Priority:Normal Normal Priority Issue or PR labels Nov 15, 2024
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

3 participants