diff --git a/parker_focapo2023/README.md b/parker_focapo2023/README.md index 45aa461..fcb18f1 100644 --- a/parker_focapo2023/README.md +++ b/parker_focapo2023/README.md @@ -32,12 +32,12 @@ of IDAES that were used testing and demonstrating the incidence graph analysis code. ### Scripts that produce the paper results -- *clc/partition_by_time.py* — Partitions the Jacobian by time (i.e. generates the left half of Figure 1) and checks the structural rank of subsystems at each point in time, as well as the full Jacobian -- *clc/partition_by_dae.py* — Partitions the Jacobian at t=30 s into differential, algebraic, and discretization equations (and corresponding variables) by naively looking for Pyomo.DAE components. Note that the resulting partition does not yield a square algebraic subsystem. -- *clc/partition_by_dae_valid.py* — Partitions the Jacoabian at t=30 s into differential, algebraic, and discretization subsystems with additional checking to make sure that differential variables are not included at the inlets (where they are fully specified by inputs and disturbances). The plot generated is the right half of Figure 2. -- *clc/analyze_1_7_alg_jac.py* — Performs the Dulmage-Mendelsohn partition on the algebraic Jacobian at t=30 s, prints the variables and constraints that appear in the under and overconstrained systems, and displays these incidence matrices. This is Figure 2. -- *clc/analyze_patched_system.py* — Checks the patched model for structural singularity, then applies the Dulmage-Mendelsohn partition to the algebraic Jacobian at t=30 s to make sure the under and over constrained subsystems are empty. Checks this system for numerical singularity. Generates the plots in Figure 3. -- *clc/compare_dyn_opt.py* — Compares characteristics of a dynamic optimization problem between the two model versions. By default, only the KKT matrix is compared and the optimization problem is not solved (because it takes a long time for the solve with the 1.7 version to terminate). This can be changed by setting the `solve` variable to True in function `main`. These results form Table 1. +- **clc/partition_by_time.py** — Partitions the Jacobian by time (i.e. generates the left half of Figure 1) and checks the structural rank of subsystems at each point in time, as well as the full Jacobian +- **clc/partition_by_dae.py** — Partitions the Jacobian at t=30 s into differential, algebraic, and discretization equations (and corresponding variables) by naively looking for Pyomo.DAE components. Note that the resulting partition does not yield a square algebraic subsystem. +- **clc/partition_by_dae_valid.py** — Partitions the Jacoabian at t=30 s into differential, algebraic, and discretization subsystems with additional checking to make sure that differential variables are not included at the inlets (where they are fully specified by inputs and disturbances). The plot generated is the right half of Figure 2. +- **clc/analyze_1_7_alg_jac.py** — Performs the Dulmage-Mendelsohn partition on the algebraic Jacobian at t=30 s, prints the variables and constraints that appear in the under and overconstrained systems, and displays these incidence matrices. This is Figure 2. +- **clc/analyze_patched_system.py** — Checks the patched model for structural singularity, then applies the Dulmage-Mendelsohn partition to the algebraic Jacobian at t=30 s to make sure the under and over constrained subsystems are empty. Checks this system for numerical singularity. Generates the plots in Figure 3. +- **clc/compare_dyn_opt.py** — Compares characteristics of a dynamic optimization problem between the two model versions. By default, only the KKT matrix is compared and the optimization problem is not solved (because it takes a long time for the solve with the 1.7 version to terminate). This can be changed by setting the `solve` variable to True in function `main`. These results form Table 1. ### Tests Please run