Partial Differential Equations (PDE’s) 
Industrial Modeling Framework (PDE-IMF) 
“Optimize Distributed Process Models in both Space and Time” 
i n d u s t r IAL g o r i t h m s LLC. (IAL) 
www.industrialgorithms.com 
October 2014 
Introduction to Partial Differential Equations (PDE’s), UOPSS and QLQP 
Presented in this short document is a description of modeling and solving partial differential 
equations (PDE’s) in both the temporal and spatial dimensions using IMPL. The sample PDE 
problem is taken from Cutlip and Shacham (1999 and 2014) and models the process of 
unsteady-state heat transfer or conduction in a one dimensional (1D) slab with one face 
insulated and constant thermal conductivity as discussed by Geankoplis (1993). The linear 
PDE which is first-order in time and second-order in space is described as follows: 
∂T/∂t = a ∂2T/∂x2 
“T” is the temperature phenomenon, “t” is the temporal dimension, “x” is the spatial dimension 
(axial, horizontal, lateral, vertical, elevational, etc.) and “a” (2x10-5) is the thermal diffusivity. The 
initial conditions have all temperatures starting in time at 100.0 except for the first temperature 
which is externally controlled at 0.0 and is the first boundary condition. The second boundary 
condition has an insulated boundary at the opposite side of the controlled temperature which 
allows no heat conduction i.e., ∂T/∂x = 0.0. 
For this small PDE problem we configure only one continuous-process unit-operation of subtype 
blackbox called SLAB (see appendices A and B). There are no in- and out-port-states given 
that there are no material flow exchanges. In IMPL, the temporal dimension is modeled 
implicitly whereas the structural (UOPSS) and spatial (“x”) dimensions must be modeled 
explicitly. For the spatial dimension, there are several viable methods to discretize space such 
as the Method of Lines (MOL, Schiesser, 1991) and the Method of Weighted Residuals (MWR, 
Villadsen and Michelsen, 1978). The first method is essentially finite-difference (FD) of space 
and is similar to the Euler’s method IMPL uses to digitize time. The second method can use 
orthogonal collocation (OC) which uses the roots of orthogonal polynomials to determine the 
discretized spatial dimensions and is a popular, useful and easy-to-use method found in many 
chemical engineering applications (Kelly, 1991) which can be applied with typically less spatial 
points than FD with comparable accuracy. 
Industrial Modeling Framework (IMF), IMPL and SSIIMPLE 
To implement the mathematical formulation of this and other systems, IAL offers a unique 
approach and is incorporated into our Industrial Modeling Programming Language we call IMPL. 
IMPL has its own modeling language called IML (short for Industrial Modeling Language) which 
is a flat or text-file interface as well as a set of API's which can be called from any computer 
programming language such as C, C++, Fortran, C#, VBA, Java (SWIG), Python (CTYPES) 
and/or Julia (CCALL) called IPL (short for Industrial Programming Language) to both build the 
model and to view the solution. Models can be a mix of linear, mixed-integer and nonlinear 
variables and constraints and are solved using a combination of LP, QP, MILP and NLP solvers
such as COINMP, GLPK, LPSOLVE, SCIP, CPLEX, GUROBI, LINDO, XPRESS, CONOPT, 
IPOPT, KNITRO and WORHP as well as our own implementation of SLP called SLPQPE 
(Successive Linear & Quadratic Programming Engine) which is a very competitive alternative to 
the other nonlinear solvers and embeds all available LP and QP solvers. 
In addition and specific to DRR problems, we also have a special solver called SECQPE 
standing for Sequential Equality-Constrained QP Engine which computes the least-squares 
solution and a post-solver called SORVE standing for Supplemental Observability, Redundancy 
and Variability Estimator to estimate the usual DRR statistics. SECQPE also includes a 
Levenberg-Marquardt regularization method for nonlinear data regression problems and can be 
presolved using SLPQPE i.e., SLPQPE warm-starts SECQPE. SORVE is run after the 
SECQPE solver and also computes the well-known "maximum-power" gross-error statistics 
(measurement and nodal/constraint tests) to help locate outliers, defects and/or faults i.e., mal-functions 
in the measurement system and mis-specifications in the logging system. 
The underlying system architecture of IMPL is called SSIIMPLE (we hope literally) which is short 
for Server, Solvers, Interfacer (IML), Interacter (IPL), Modeler, Presolver Libraries and 
Executable. The Server, Solvers, Presolver and Executable are primarily model or problem-independent 
whereas the Interfacer, Interacter and Modeler are typically domain-specific i.e., 
model or problem-dependent. Fortunately, for most industrial planning, scheduling, 
optimization, control and monitoring problems found in the process industries, IMPL's standard 
Interfacer, Interacter and Modeler are well-suited and comprehensive to model the most difficult 
of production and process complexities allowing for the formulations of straightforward 
coefficient equations, ubiquitous conservation laws, rigorous constitutive relations, empirical 
correlative expressions and other necessary side constraints. 
User, custom, adhoc or external constraints can be augmented or appended to IMPL when 
necessary in several ways. For MILP or logistics problems we offer user-defined constraints 
configurable from the IML file or the IPL code where the variables and constraints are 
referenced using unit-operation-port-state names and the quantity-logic variable types. It is also 
possible to import a foreign *.ILP file (row-based MPS file) which can be generated by any 
algebraic modeling language or matrix generator. This file is read just prior to generating the 
matrix and before exporting to the LP, QP or MILP solver. For NLP or quality problems we offer 
user-defined formula configuration in the IML file and single-value and multi-value function 
blocks writable in C, C++ or Fortran. The nonlinear formulas may include intrinsic functions 
such as EXP, LN, LOG, SIN, COS, TAN, MIN, MAX, IF, NOT, EQ, NE, LE, LT, GE, GT and CIP, 
LIP, SIP and KIP (constant, linear and monotonic spline interpolations) as well as user-written 
extrinsic functions (XFCN). It is also possible to import another type of foreign file called the 
*.INL file where both linear and nonlinear constraints can be added easily using new or existing 
IMPL variables. 
Industrial modeling frameworks or IMF's are intended to provide a jump-start to an industrial 
project implementation i.e., a pre-project if you will, whereby pre-configured IML files and/or IPL 
code are available specific to your problem at hand. The IML files and/or IPL code can be 
easily enhanced, extended, customized, modified, etc. to meet the diverse needs of your project 
and as it evolves over time and use. IMF's also provide graphical user interface prototypes for 
drawing the flowsheet as in Figure 1 and typical Gantt charts and trend plots to view the solution 
of quantity, logic and quality time-profiles. Current developments use Python 2.3 and 2.7 
integrated with open-source Gnome Dia and Matplotlib modules respectively but other 
prototypes embedded within Microsoft Excel/VBA for example can be created in a 
straightforward manner.
However, the primary purpose of the IMF's is to provide a timely, cost-effective, manageable 
and maintainable deployment of IMPL to formulate and optimize complex industrial 
manufacturing systems in either off-line or on-line environments. Using IMPL alone would be 
somewhat similar (but not as bad) to learning the syntax and semantics of an AML as well as 
having to code all of the necessary mathematical representations of the problem including the 
details of digitizing your data into time-points and periods, demarcating past, present and future 
time-horizons, defining sets, index-sets, compound-sets to traverse the network or topology, 
calculating independent and dependent parameters to be used as coefficients and bounds and 
finally creating all of the necessary variables and constraints to model the complex details of 
logistics and quality industrial optimization problems. Instead, IMF's and IMPL provide, in our 
opinion, a more elegant and structured approach to industrial modeling and solving so that you 
can capture the benefits of advanced decision-making faster, better and cheaper. 
Partial Differential Equations (PDE) Synopsis 
At this point we explore further the application of modeling and solving PDE’s in IMPL 
comparing FD with 11 (eleven) spatial points and OC with 5 (five) spatial or collocation points. 
The problem is configured with 1-second time-period durations with a future time-horizon of 
6,000 equidistant time-periods or seconds. 
The FD formulation found in Appendix A is taken directly from Cutlip and Shachum (2014) and 
our and their results found in Table 1 are very close. The problem is solved using IPOPT-MUMPS 
in less than 1-second of CPU time with 1 (one) iteration and there are 60,001 equality 
constraints, 60,001 variables and 227,992 Jacobian elements (with zero degrees-of-freedom). 
Table 1. FD Temperatures at Time 6000-seconds. 
Space Temperature 
0 0.00E+00 
0.1 1.62E+01 
0.2 3.17E+01 
0.3 4.60E+01 
0.4 5.85E+01 
0.5 6.90E+01 
0.6 7.75E+01 
0.7 8.38E+01 
0.8 8.82E+01 
0.9 9.08E+01 
1 9.17E+01 
The OC formulation found in Appendix B uses the Villadsen and Michelsen (1978) technique to 
calculate the 5 (five) spatial collocation points (2 (two) exterior and 3 (three) interior) where the 
first and second-order derivative weights as well as the interpolation weights are computed 
using an external or extrinsic function (XFCN) coded in Fortran. The problem has 30,001 
equality constraints, 30,001 variables and 143,998 Jacobian elements.
The results for the OC method are shown in Table 2 with the 5 (five) collocation points where x1 
corresponds to x = 0.0 and x5 corresponds to x = 1.0. The row with x = 0.2 is an interpolated 
value using the interpolation weights (C1, C2, …, C5) found in Appendix B. 
Table 2. OC Temperatures at Time 6000-seconds. 
Space Temperature 
x1 0.00E+00 
x2 1.79E+01 
x3 6.88E+01 
x4 9.09E+01 
x5 9.18E+01 
x = 0.2 3.12E+01 
There is good agreement between the FD and OC methods for x5 (x = 1.0) and at x = 0.2 which 
confirms that both methods are viable approaches to numerically solving PDE’s. 
In summary, it should be clear that IMPL can be used to model and solve not only dynamic 
problems but also “distributed” problems where the term distributed is used to describe 
problems that are spatially distributed or dispersed as opposed to those that are “lumped” or 
non-distributed. Essentially, these types of problems are simply discretized across not only time 
but also space where ultimately algebraic equations result. Finally, once we have algebraic 
equalities (and inequalities) then we can optimize instead of just simulating where we can either 
maximize an economic objective function or minimize a parameter estimation sum of squares of 
residuals to calibrate or fit model parameters. 
References 
Villadsen, J., Michelsen, M.L., “Solution of differential equation models by polynomial 
approximation”, Prentice-Hall, (1978). 
Schiesser, W.E., “The numerical model of lines”, Academic Press, (1991). 
Kelly, J.D., “The design, construction, modeling, identification and multivariable constraint 
control of a pilot plant fluidized bed catalytic reactor”, M.Eng., McMaster University, (1991). 
Geankoplis, C.J., “Transport processes and unit operations”, 3rd Edition, Prentice-Hall, (1993). 
Cutlip, M.B., Shacham, M., “Problem solving in chemical engineering with numerical methods, 
Prentice-Hall, (1999). 
Cutlip, M.B., Shacham, M.,”The numerical model of lines for partial differential equations”, 
http://www.polymath-software.com/papers/cachen2.pdf, accessed October, (2014). 
Appendix A – PDE-IMF-FD.IML File 
i M P l (c) 
Copyright and Property of i n d u s t r I A L g o r i t h m s LLC. 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Calculation Data (Parameters)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sCalc,@sValue 
PERIOD,1.0 
START,-PERIOD 
BEGIN,0.0 
END,6000.0 
dx,0.1 
&sCalc,@sValue 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Chronological Data (Periods) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
@rPastTHD,@rFutureTHD,@rTPD 
START,END,PERIOD 
@rPastTHD,@rFutureTHD,@rTPD 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Construction Data (Pointers) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,@sType,@sSubtype,@sUse 
SLAB,,processc,blackbox,, 
&sUnit,&sOperation,@sType,@sSubtype,@sUse 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Condition Data (Properties) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sCondition 
T1 
T2 
T3 
T4 
T5 
T6 
T7 
T8 
T9 
T10 
T11 
eqT2 
eqT3 
eqT4 
eqT5 
eqT6 
eqT7 
eqT8 
eqT9 
eqT10 
&sCondition 
&sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names 
a,static 
&sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names 
&sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target 
SLAB,,T1,0.0,0.0, 
SLAB,,T2,0.0,200.0, 
SLAB,,T3,0.0,200.0, 
SLAB,,T4,0.0,200.0, 
SLAB,,T5,0.0,200.0, 
SLAB,,T6,0.0,200.0, 
SLAB,,T7,0.0,200.0, 
SLAB,,T8,0.0,200.0, 
SLAB,,T9,0.0,200.0, 
SLAB,,T10,0.0,200.0, 
SLAB,,T11,0.0,200.0, 
SLAB,,eqT2,0.0,0.0, 
SLAB,,eqT3,0.0,0.0, 
SLAB,,eqT4,0.0,0.0, 
SLAB,,eqT5,0.0,0.0, 
SLAB,,eqT6,0.0,0.0, 
SLAB,,eqT7,0.0,0.0, 
SLAB,,eqT8,0.0,0.0, 
SLAB,,eqT9,0.0,0.0, 
SLAB,,eqT10,0.0,0.0, 
&sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target 
&sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target 
SLAB,,a,2.0E-5,2.0E-5, 
&sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target 
ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue 
SLAB,,eqT2,?,3,T2 - T2[-1] - a / dx^2.0 * (T3-2.0*T2+T1) * PERIOD 
SLAB,,eqT3,?,3,T3 - T3[-1] - a / dx^2.0 * (T4-2.0*T3+T2) * PERIOD 
SLAB,,eqT4,?,3,T4 - T4[-1] - a / dx^2.0 * (T5-2.0*T4+T3) * PERIOD 
SLAB,,eqT5,?,3,T5 - T5[-1] - a / dx^2.0 * (T6-2.0*T5+T4) * PERIOD 
SLAB,,eqT6,?,3,T6 - T6[-1] - a / dx^2.0 * (T7-2.0*T6+T5) * PERIOD 
SLAB,,eqT7,?,3,T7 - T7[-1] - a / dx^2.0 * (T8-2.0*T7+T6) * PERIOD 
SLAB,,eqT8,?,3,T8 - T8[-1] - a / dx^2.0 * (T9-2.0*T8+T7) * PERIOD
SLAB,,eqT9,?,3,T9 - T9[-1] - a / dx^2.0 * (T10-2.0*T9+T8) * PERIOD 
SLAB,,eqT10,?,3,T10 - T10[-1] - a / dx^2.0 * (T11-2.0*T10+T9) * PERIOD 
SLAB,,T11,?,3,(4.0 * T10 - T9) / 3.0 
ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Cost Data (Pricing) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight 
&sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Content Data (Past, Present Provisos) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time 
SLAB,,T2,100.0,0.0 
SLAB,,T3,100.0,0.0 
SLAB,,T4,100.0,0.0 
SLAB,,T5,100.0,0.0 
SLAB,,T6,100.0,0.0 
SLAB,,T7,100.0,0.0 
SLAB,,T8,100.0,0.0 
SLAB,,T9,100.0,0.0 
SLAB,,T10,100.0,0.0 
&sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Command Data (Future Provisos) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time 
SLAB,,1,1,BEGIN,END 
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time 
Appendix B – PDE-IMF-OC.IML File 
i M P l (c) 
Copyright and Property of i n d u s t r I A L g o r i t h m s LLC. 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Calculation Data (Parameters) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sCalc,@sValue 
PERIOD,1.0 
START,-PERIOD 
BEGIN,0.0 
END,6000.0 
&sCalc,@sValue 
XFCN-@sPath_Name,@sLibrary_Name,@sFunction_Name 
C:IndustrialAlgorithmsProceduresx64Release,xfunc_ocl.dll,xfunc_ocl 
XFCN-@sPath_Name,@sLibrary_Name,@sFunction_Name 
&sCalc,@sValue 
ALPHA,0.0 
BETA,0.0 
A11,XFCN(1;1;3;1;1;1;ALPHA;BETA) 
A12,XFCN(1;2;3;1;1;1;ALPHA;BETA) 
A13,XFCN(1;3;3;1;1;1;ALPHA;BETA) 
A14,XFCN(1;4;3;1;1;1;ALPHA;BETA) 
A15,XFCN(1;5;3;1;1;1;ALPHA;BETA) 
A21,XFCN(2;1;3;1;1;1;ALPHA;BETA) 
A22,XFCN(2;2;3;1;1;1;ALPHA;BETA) 
A23,XFCN(2;3;3;1;1;1;ALPHA;BETA) 
A24,XFCN(2;4;3;1;1;1;ALPHA;BETA) 
A25,XFCN(2;5;3;1;1;1;ALPHA;BETA) 
A31,XFCN(3;1;3;1;1;1;ALPHA;BETA) 
A32,XFCN(3;2;3;1;1;1;ALPHA;BETA) 
A33,XFCN(3;3;3;1;1;1;ALPHA;BETA) 
A34,XFCN(3;4;3;1;1;1;ALPHA;BETA) 
A35,XFCN(3;5;3;1;1;1;ALPHA;BETA) 
A41,XFCN(4;1;3;1;1;1;ALPHA;BETA) 
A42,XFCN(4;2;3;1;1;1;ALPHA;BETA) 
A43,XFCN(4;3;3;1;1;1;ALPHA;BETA) 
A44,XFCN(4;4;3;1;1;1;ALPHA;BETA) 
A45,XFCN(4;5;3;1;1;1;ALPHA;BETA) 
A51,XFCN(5;1;3;1;1;1;ALPHA;BETA) 
A52,XFCN(5;2;3;1;1;1;ALPHA;BETA) 
A53,XFCN(5;3;3;1;1;1;ALPHA;BETA) 
A54,XFCN(5;4;3;1;1;1;ALPHA;BETA) 
A55,XFCN(5;5;3;1;1;1;ALPHA;BETA) 
B11,XFCN(1;1;3;1;1;2;ALPHA;BETA) 
B12,XFCN(1;2;3;1;1;2;ALPHA;BETA) 
B13,XFCN(1;3;3;1;1;2;ALPHA;BETA) 
B14,XFCN(1;4;3;1;1;2;ALPHA;BETA) 
B15,XFCN(1;5;3;1;1;2;ALPHA;BETA) 
B21,XFCN(2;1;3;1;1;2;ALPHA;BETA)
B22,XFCN(2;2;3;1;1;2;ALPHA;BETA) 
B23,XFCN(2;3;3;1;1;2;ALPHA;BETA) 
B24,XFCN(2;4;3;1;1;2;ALPHA;BETA) 
B25,XFCN(2;5;3;1;1;2;ALPHA;BETA) 
B31,XFCN(3;1;3;1;1;2;ALPHA;BETA) 
B32,XFCN(3;2;3;1;1;2;ALPHA;BETA) 
B33,XFCN(3;3;3;1;1;2;ALPHA;BETA) 
B34,XFCN(3;4;3;1;1;2;ALPHA;BETA) 
B35,XFCN(3;5;3;1;1;2;ALPHA;BETA) 
B41,XFCN(4;1;3;1;1;2;ALPHA;BETA) 
B42,XFCN(4;2;3;1;1;2;ALPHA;BETA) 
B43,XFCN(4;3;3;1;1;2;ALPHA;BETA) 
B44,XFCN(4;4;3;1;1;2;ALPHA;BETA) 
B45,XFCN(4;5;3;1;1;2;ALPHA;BETA) 
B51,XFCN(5;1;3;1;1;2;ALPHA;BETA) 
B52,XFCN(5;2;3;1;1;2;ALPHA;BETA) 
B53,XFCN(5;3;3;1;1;2;ALPHA;BETA) 
B54,XFCN(5;4;3;1;1;2;ALPHA;BETA) 
B55,XFCN(5;5;3;1;1;2;ALPHA;BETA) 
C1,XFCN(0.2;1;3;1;1;ALPHA;BETA) 
C2,XFCN(0.2;2;3;1;1;ALPHA;BETA) 
C3,XFCN(0.2;3;3;1;1;ALPHA;BETA) 
C4,XFCN(0.2;4;3;1;1;ALPHA;BETA) 
C5,XFCN(0.2;5;3;1;1;ALPHA;BETA) 
&sCalc,@sValue 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Chronological Data (Periods) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
@rPastTHD,@rFutureTHD,@rTPD 
START,END,PERIOD 
@rPastTHD,@rFutureTHD,@rTPD 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Construction Data (Pointers) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,@sType,@sSubtype,@sUse 
SLAB,,processc,blackbox,, 
&sUnit,&sOperation,@sType,@sSubtype,@sUse 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Condition Data (Properties) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sCondition 
T1 
T2 
T3 
T4 
T5 
TX 
eqT2 
eqT3 
eqT4 
eqT5 
eqTX 
&sCondition 
&sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names 
a,static 
&sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names 
&sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target 
SLAB,,T1,0.0,0.0, 
SLAB,,T2,0.0,200.0, 
SLAB,,T3,0.0,200.0, 
SLAB,,T4,0.0,200.0, 
SLAB,,T5,0.0,200.0, 
SLAB,,TX,0.0,200.0, 
SLAB,,eqT2,0.0,0.0, 
SLAB,,eqT3,0.0,0.0, 
SLAB,,eqT4,0.0,0.0, 
SLAB,,eqT5,0.0,0.0, 
&sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target 
&sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target 
SLAB,,a,2.0E-5,2.0E-5, 
&sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target 
ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue 
SLAB,,eqT2,?,3,T2 - T2[-1] - a * (B21*T1+B22*T2+B23*T3+B24*T4+B25*T5) * PERIOD 
SLAB,,eqT3,?,3,T3 - T3[-1] - a * (B31*T1+B32*T2+B33*T3+B34*T4+B35*T5) * PERIOD 
SLAB,,eqT4,?,3,T4 - T4[-1] - a * (B41*T1+B42*T2+B43*T3+B44*T4+B45*T5) * PERIOD 
SLAB,,eqT5,?,3,(A51*T1+A52*T2+A53*T3+A54*T4+A55*T5) 
SLAB,,TX,?,3,(C1*T1+C2*T2+C3*T3+C4*T4+C5*T5) 
ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Cost Data (Pricing) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight 
&sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Content Data (Past, Present Provisos) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time 
SLAB,,T2,100.0,0.0 
SLAB,,T3,100.0,0.0 
SLAB,,T4,100.0,0.0 
&sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! Command Data (Future Provisos) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time 
SLAB,,1,1,BEGIN,END 
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time

Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)

  • 1.
    Partial Differential Equations(PDE’s) Industrial Modeling Framework (PDE-IMF) “Optimize Distributed Process Models in both Space and Time” i n d u s t r IAL g o r i t h m s LLC. (IAL) www.industrialgorithms.com October 2014 Introduction to Partial Differential Equations (PDE’s), UOPSS and QLQP Presented in this short document is a description of modeling and solving partial differential equations (PDE’s) in both the temporal and spatial dimensions using IMPL. The sample PDE problem is taken from Cutlip and Shacham (1999 and 2014) and models the process of unsteady-state heat transfer or conduction in a one dimensional (1D) slab with one face insulated and constant thermal conductivity as discussed by Geankoplis (1993). The linear PDE which is first-order in time and second-order in space is described as follows: ∂T/∂t = a ∂2T/∂x2 “T” is the temperature phenomenon, “t” is the temporal dimension, “x” is the spatial dimension (axial, horizontal, lateral, vertical, elevational, etc.) and “a” (2x10-5) is the thermal diffusivity. The initial conditions have all temperatures starting in time at 100.0 except for the first temperature which is externally controlled at 0.0 and is the first boundary condition. The second boundary condition has an insulated boundary at the opposite side of the controlled temperature which allows no heat conduction i.e., ∂T/∂x = 0.0. For this small PDE problem we configure only one continuous-process unit-operation of subtype blackbox called SLAB (see appendices A and B). There are no in- and out-port-states given that there are no material flow exchanges. In IMPL, the temporal dimension is modeled implicitly whereas the structural (UOPSS) and spatial (“x”) dimensions must be modeled explicitly. For the spatial dimension, there are several viable methods to discretize space such as the Method of Lines (MOL, Schiesser, 1991) and the Method of Weighted Residuals (MWR, Villadsen and Michelsen, 1978). The first method is essentially finite-difference (FD) of space and is similar to the Euler’s method IMPL uses to digitize time. The second method can use orthogonal collocation (OC) which uses the roots of orthogonal polynomials to determine the discretized spatial dimensions and is a popular, useful and easy-to-use method found in many chemical engineering applications (Kelly, 1991) which can be applied with typically less spatial points than FD with comparable accuracy. Industrial Modeling Framework (IMF), IMPL and SSIIMPLE To implement the mathematical formulation of this and other systems, IAL offers a unique approach and is incorporated into our Industrial Modeling Programming Language we call IMPL. IMPL has its own modeling language called IML (short for Industrial Modeling Language) which is a flat or text-file interface as well as a set of API's which can be called from any computer programming language such as C, C++, Fortran, C#, VBA, Java (SWIG), Python (CTYPES) and/or Julia (CCALL) called IPL (short for Industrial Programming Language) to both build the model and to view the solution. Models can be a mix of linear, mixed-integer and nonlinear variables and constraints and are solved using a combination of LP, QP, MILP and NLP solvers
  • 2.
    such as COINMP,GLPK, LPSOLVE, SCIP, CPLEX, GUROBI, LINDO, XPRESS, CONOPT, IPOPT, KNITRO and WORHP as well as our own implementation of SLP called SLPQPE (Successive Linear & Quadratic Programming Engine) which is a very competitive alternative to the other nonlinear solvers and embeds all available LP and QP solvers. In addition and specific to DRR problems, we also have a special solver called SECQPE standing for Sequential Equality-Constrained QP Engine which computes the least-squares solution and a post-solver called SORVE standing for Supplemental Observability, Redundancy and Variability Estimator to estimate the usual DRR statistics. SECQPE also includes a Levenberg-Marquardt regularization method for nonlinear data regression problems and can be presolved using SLPQPE i.e., SLPQPE warm-starts SECQPE. SORVE is run after the SECQPE solver and also computes the well-known "maximum-power" gross-error statistics (measurement and nodal/constraint tests) to help locate outliers, defects and/or faults i.e., mal-functions in the measurement system and mis-specifications in the logging system. The underlying system architecture of IMPL is called SSIIMPLE (we hope literally) which is short for Server, Solvers, Interfacer (IML), Interacter (IPL), Modeler, Presolver Libraries and Executable. The Server, Solvers, Presolver and Executable are primarily model or problem-independent whereas the Interfacer, Interacter and Modeler are typically domain-specific i.e., model or problem-dependent. Fortunately, for most industrial planning, scheduling, optimization, control and monitoring problems found in the process industries, IMPL's standard Interfacer, Interacter and Modeler are well-suited and comprehensive to model the most difficult of production and process complexities allowing for the formulations of straightforward coefficient equations, ubiquitous conservation laws, rigorous constitutive relations, empirical correlative expressions and other necessary side constraints. User, custom, adhoc or external constraints can be augmented or appended to IMPL when necessary in several ways. For MILP or logistics problems we offer user-defined constraints configurable from the IML file or the IPL code where the variables and constraints are referenced using unit-operation-port-state names and the quantity-logic variable types. It is also possible to import a foreign *.ILP file (row-based MPS file) which can be generated by any algebraic modeling language or matrix generator. This file is read just prior to generating the matrix and before exporting to the LP, QP or MILP solver. For NLP or quality problems we offer user-defined formula configuration in the IML file and single-value and multi-value function blocks writable in C, C++ or Fortran. The nonlinear formulas may include intrinsic functions such as EXP, LN, LOG, SIN, COS, TAN, MIN, MAX, IF, NOT, EQ, NE, LE, LT, GE, GT and CIP, LIP, SIP and KIP (constant, linear and monotonic spline interpolations) as well as user-written extrinsic functions (XFCN). It is also possible to import another type of foreign file called the *.INL file where both linear and nonlinear constraints can be added easily using new or existing IMPL variables. Industrial modeling frameworks or IMF's are intended to provide a jump-start to an industrial project implementation i.e., a pre-project if you will, whereby pre-configured IML files and/or IPL code are available specific to your problem at hand. The IML files and/or IPL code can be easily enhanced, extended, customized, modified, etc. to meet the diverse needs of your project and as it evolves over time and use. IMF's also provide graphical user interface prototypes for drawing the flowsheet as in Figure 1 and typical Gantt charts and trend plots to view the solution of quantity, logic and quality time-profiles. Current developments use Python 2.3 and 2.7 integrated with open-source Gnome Dia and Matplotlib modules respectively but other prototypes embedded within Microsoft Excel/VBA for example can be created in a straightforward manner.
  • 3.
    However, the primarypurpose of the IMF's is to provide a timely, cost-effective, manageable and maintainable deployment of IMPL to formulate and optimize complex industrial manufacturing systems in either off-line or on-line environments. Using IMPL alone would be somewhat similar (but not as bad) to learning the syntax and semantics of an AML as well as having to code all of the necessary mathematical representations of the problem including the details of digitizing your data into time-points and periods, demarcating past, present and future time-horizons, defining sets, index-sets, compound-sets to traverse the network or topology, calculating independent and dependent parameters to be used as coefficients and bounds and finally creating all of the necessary variables and constraints to model the complex details of logistics and quality industrial optimization problems. Instead, IMF's and IMPL provide, in our opinion, a more elegant and structured approach to industrial modeling and solving so that you can capture the benefits of advanced decision-making faster, better and cheaper. Partial Differential Equations (PDE) Synopsis At this point we explore further the application of modeling and solving PDE’s in IMPL comparing FD with 11 (eleven) spatial points and OC with 5 (five) spatial or collocation points. The problem is configured with 1-second time-period durations with a future time-horizon of 6,000 equidistant time-periods or seconds. The FD formulation found in Appendix A is taken directly from Cutlip and Shachum (2014) and our and their results found in Table 1 are very close. The problem is solved using IPOPT-MUMPS in less than 1-second of CPU time with 1 (one) iteration and there are 60,001 equality constraints, 60,001 variables and 227,992 Jacobian elements (with zero degrees-of-freedom). Table 1. FD Temperatures at Time 6000-seconds. Space Temperature 0 0.00E+00 0.1 1.62E+01 0.2 3.17E+01 0.3 4.60E+01 0.4 5.85E+01 0.5 6.90E+01 0.6 7.75E+01 0.7 8.38E+01 0.8 8.82E+01 0.9 9.08E+01 1 9.17E+01 The OC formulation found in Appendix B uses the Villadsen and Michelsen (1978) technique to calculate the 5 (five) spatial collocation points (2 (two) exterior and 3 (three) interior) where the first and second-order derivative weights as well as the interpolation weights are computed using an external or extrinsic function (XFCN) coded in Fortran. The problem has 30,001 equality constraints, 30,001 variables and 143,998 Jacobian elements.
  • 4.
    The results forthe OC method are shown in Table 2 with the 5 (five) collocation points where x1 corresponds to x = 0.0 and x5 corresponds to x = 1.0. The row with x = 0.2 is an interpolated value using the interpolation weights (C1, C2, …, C5) found in Appendix B. Table 2. OC Temperatures at Time 6000-seconds. Space Temperature x1 0.00E+00 x2 1.79E+01 x3 6.88E+01 x4 9.09E+01 x5 9.18E+01 x = 0.2 3.12E+01 There is good agreement between the FD and OC methods for x5 (x = 1.0) and at x = 0.2 which confirms that both methods are viable approaches to numerically solving PDE’s. In summary, it should be clear that IMPL can be used to model and solve not only dynamic problems but also “distributed” problems where the term distributed is used to describe problems that are spatially distributed or dispersed as opposed to those that are “lumped” or non-distributed. Essentially, these types of problems are simply discretized across not only time but also space where ultimately algebraic equations result. Finally, once we have algebraic equalities (and inequalities) then we can optimize instead of just simulating where we can either maximize an economic objective function or minimize a parameter estimation sum of squares of residuals to calibrate or fit model parameters. References Villadsen, J., Michelsen, M.L., “Solution of differential equation models by polynomial approximation”, Prentice-Hall, (1978). Schiesser, W.E., “The numerical model of lines”, Academic Press, (1991). Kelly, J.D., “The design, construction, modeling, identification and multivariable constraint control of a pilot plant fluidized bed catalytic reactor”, M.Eng., McMaster University, (1991). Geankoplis, C.J., “Transport processes and unit operations”, 3rd Edition, Prentice-Hall, (1993). Cutlip, M.B., Shacham, M., “Problem solving in chemical engineering with numerical methods, Prentice-Hall, (1999). Cutlip, M.B., Shacham, M.,”The numerical model of lines for partial differential equations”, http://www.polymath-software.com/papers/cachen2.pdf, accessed October, (2014). Appendix A – PDE-IMF-FD.IML File i M P l (c) Copyright and Property of i n d u s t r I A L g o r i t h m s LLC. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Calculation Data (Parameters)
  • 5.
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sCalc,@sValue PERIOD,1.0 START,-PERIOD BEGIN,0.0 END,6000.0 dx,0.1 &sCalc,@sValue !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Chronological Data (Periods) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @rPastTHD,@rFutureTHD,@rTPD START,END,PERIOD @rPastTHD,@rFutureTHD,@rTPD !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Construction Data (Pointers) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,@sType,@sSubtype,@sUse SLAB,,processc,blackbox,, &sUnit,&sOperation,@sType,@sSubtype,@sUse !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Condition Data (Properties) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sCondition T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 eqT2 eqT3 eqT4 eqT5 eqT6 eqT7 eqT8 eqT9 eqT10 &sCondition &sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names a,static &sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names &sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target SLAB,,T1,0.0,0.0, SLAB,,T2,0.0,200.0, SLAB,,T3,0.0,200.0, SLAB,,T4,0.0,200.0, SLAB,,T5,0.0,200.0, SLAB,,T6,0.0,200.0, SLAB,,T7,0.0,200.0, SLAB,,T8,0.0,200.0, SLAB,,T9,0.0,200.0, SLAB,,T10,0.0,200.0, SLAB,,T11,0.0,200.0, SLAB,,eqT2,0.0,0.0, SLAB,,eqT3,0.0,0.0, SLAB,,eqT4,0.0,0.0, SLAB,,eqT5,0.0,0.0, SLAB,,eqT6,0.0,0.0, SLAB,,eqT7,0.0,0.0, SLAB,,eqT8,0.0,0.0, SLAB,,eqT9,0.0,0.0, SLAB,,eqT10,0.0,0.0, &sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target &sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target SLAB,,a,2.0E-5,2.0E-5, &sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue SLAB,,eqT2,?,3,T2 - T2[-1] - a / dx^2.0 * (T3-2.0*T2+T1) * PERIOD SLAB,,eqT3,?,3,T3 - T3[-1] - a / dx^2.0 * (T4-2.0*T3+T2) * PERIOD SLAB,,eqT4,?,3,T4 - T4[-1] - a / dx^2.0 * (T5-2.0*T4+T3) * PERIOD SLAB,,eqT5,?,3,T5 - T5[-1] - a / dx^2.0 * (T6-2.0*T5+T4) * PERIOD SLAB,,eqT6,?,3,T6 - T6[-1] - a / dx^2.0 * (T7-2.0*T6+T5) * PERIOD SLAB,,eqT7,?,3,T7 - T7[-1] - a / dx^2.0 * (T8-2.0*T7+T6) * PERIOD SLAB,,eqT8,?,3,T8 - T8[-1] - a / dx^2.0 * (T9-2.0*T8+T7) * PERIOD
  • 6.
    SLAB,,eqT9,?,3,T9 - T9[-1]- a / dx^2.0 * (T10-2.0*T9+T8) * PERIOD SLAB,,eqT10,?,3,T10 - T10[-1] - a / dx^2.0 * (T11-2.0*T10+T9) * PERIOD SLAB,,T11,?,3,(4.0 * T10 - T9) / 3.0 ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Cost Data (Pricing) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight &sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Content Data (Past, Present Provisos) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time SLAB,,T2,100.0,0.0 SLAB,,T3,100.0,0.0 SLAB,,T4,100.0,0.0 SLAB,,T5,100.0,0.0 SLAB,,T6,100.0,0.0 SLAB,,T7,100.0,0.0 SLAB,,T8,100.0,0.0 SLAB,,T9,100.0,0.0 SLAB,,T10,100.0,0.0 &sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Command Data (Future Provisos) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time SLAB,,1,1,BEGIN,END &sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time Appendix B – PDE-IMF-OC.IML File i M P l (c) Copyright and Property of i n d u s t r I A L g o r i t h m s LLC. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Calculation Data (Parameters) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sCalc,@sValue PERIOD,1.0 START,-PERIOD BEGIN,0.0 END,6000.0 &sCalc,@sValue XFCN-@sPath_Name,@sLibrary_Name,@sFunction_Name C:IndustrialAlgorithmsProceduresx64Release,xfunc_ocl.dll,xfunc_ocl XFCN-@sPath_Name,@sLibrary_Name,@sFunction_Name &sCalc,@sValue ALPHA,0.0 BETA,0.0 A11,XFCN(1;1;3;1;1;1;ALPHA;BETA) A12,XFCN(1;2;3;1;1;1;ALPHA;BETA) A13,XFCN(1;3;3;1;1;1;ALPHA;BETA) A14,XFCN(1;4;3;1;1;1;ALPHA;BETA) A15,XFCN(1;5;3;1;1;1;ALPHA;BETA) A21,XFCN(2;1;3;1;1;1;ALPHA;BETA) A22,XFCN(2;2;3;1;1;1;ALPHA;BETA) A23,XFCN(2;3;3;1;1;1;ALPHA;BETA) A24,XFCN(2;4;3;1;1;1;ALPHA;BETA) A25,XFCN(2;5;3;1;1;1;ALPHA;BETA) A31,XFCN(3;1;3;1;1;1;ALPHA;BETA) A32,XFCN(3;2;3;1;1;1;ALPHA;BETA) A33,XFCN(3;3;3;1;1;1;ALPHA;BETA) A34,XFCN(3;4;3;1;1;1;ALPHA;BETA) A35,XFCN(3;5;3;1;1;1;ALPHA;BETA) A41,XFCN(4;1;3;1;1;1;ALPHA;BETA) A42,XFCN(4;2;3;1;1;1;ALPHA;BETA) A43,XFCN(4;3;3;1;1;1;ALPHA;BETA) A44,XFCN(4;4;3;1;1;1;ALPHA;BETA) A45,XFCN(4;5;3;1;1;1;ALPHA;BETA) A51,XFCN(5;1;3;1;1;1;ALPHA;BETA) A52,XFCN(5;2;3;1;1;1;ALPHA;BETA) A53,XFCN(5;3;3;1;1;1;ALPHA;BETA) A54,XFCN(5;4;3;1;1;1;ALPHA;BETA) A55,XFCN(5;5;3;1;1;1;ALPHA;BETA) B11,XFCN(1;1;3;1;1;2;ALPHA;BETA) B12,XFCN(1;2;3;1;1;2;ALPHA;BETA) B13,XFCN(1;3;3;1;1;2;ALPHA;BETA) B14,XFCN(1;4;3;1;1;2;ALPHA;BETA) B15,XFCN(1;5;3;1;1;2;ALPHA;BETA) B21,XFCN(2;1;3;1;1;2;ALPHA;BETA)
  • 7.
    B22,XFCN(2;2;3;1;1;2;ALPHA;BETA) B23,XFCN(2;3;3;1;1;2;ALPHA;BETA) B24,XFCN(2;4;3;1;1;2;ALPHA;BETA) B25,XFCN(2;5;3;1;1;2;ALPHA;BETA) B31,XFCN(3;1;3;1;1;2;ALPHA;BETA) B32,XFCN(3;2;3;1;1;2;ALPHA;BETA) B33,XFCN(3;3;3;1;1;2;ALPHA;BETA) B34,XFCN(3;4;3;1;1;2;ALPHA;BETA) B35,XFCN(3;5;3;1;1;2;ALPHA;BETA) B41,XFCN(4;1;3;1;1;2;ALPHA;BETA) B42,XFCN(4;2;3;1;1;2;ALPHA;BETA) B43,XFCN(4;3;3;1;1;2;ALPHA;BETA) B44,XFCN(4;4;3;1;1;2;ALPHA;BETA) B45,XFCN(4;5;3;1;1;2;ALPHA;BETA) B51,XFCN(5;1;3;1;1;2;ALPHA;BETA) B52,XFCN(5;2;3;1;1;2;ALPHA;BETA) B53,XFCN(5;3;3;1;1;2;ALPHA;BETA) B54,XFCN(5;4;3;1;1;2;ALPHA;BETA) B55,XFCN(5;5;3;1;1;2;ALPHA;BETA) C1,XFCN(0.2;1;3;1;1;ALPHA;BETA) C2,XFCN(0.2;2;3;1;1;ALPHA;BETA) C3,XFCN(0.2;3;3;1;1;ALPHA;BETA) C4,XFCN(0.2;4;3;1;1;ALPHA;BETA) C5,XFCN(0.2;5;3;1;1;ALPHA;BETA) &sCalc,@sValue !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Chronological Data (Periods) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @rPastTHD,@rFutureTHD,@rTPD START,END,PERIOD @rPastTHD,@rFutureTHD,@rTPD !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Construction Data (Pointers) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,@sType,@sSubtype,@sUse SLAB,,processc,blackbox,, &sUnit,&sOperation,@sType,@sSubtype,@sUse !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Condition Data (Properties) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sCondition T1 T2 T3 T4 T5 TX eqT2 eqT3 eqT4 eqT5 eqTX &sCondition &sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names a,static &sCoefficient,@sType,@sPath_Name,@sLibrary_Name,@sFunction_Name,@iNumber_Conditions,@rPerturb_Size,@sCondition_Names &sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target SLAB,,T1,0.0,0.0, SLAB,,T2,0.0,200.0, SLAB,,T3,0.0,200.0, SLAB,,T4,0.0,200.0, SLAB,,T5,0.0,200.0, SLAB,,TX,0.0,200.0, SLAB,,eqT2,0.0,0.0, SLAB,,eqT3,0.0,0.0, SLAB,,eqT4,0.0,0.0, SLAB,,eqT5,0.0,0.0, &sUnit,&sOperation,&sCondition,@rCondition_Lower,@rCondition_Upper,@rCondition_Target &sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target SLAB,,a,2.0E-5,2.0E-5, &sUnit,&sOperation,&sCoefficient,@rCoefficient_Lower,@rCoefficient_Upper,@rCoefficient_Target ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue SLAB,,eqT2,?,3,T2 - T2[-1] - a * (B21*T1+B22*T2+B23*T3+B24*T4+B25*T5) * PERIOD SLAB,,eqT3,?,3,T3 - T3[-1] - a * (B31*T1+B32*T2+B33*T3+B34*T4+B35*T5) * PERIOD SLAB,,eqT4,?,3,T4 - T4[-1] - a * (B41*T1+B42*T2+B43*T3+B44*T4+B45*T5) * PERIOD SLAB,,eqT5,?,3,(A51*T1+A52*T2+A53*T3+A54*T4+A55*T5) SLAB,,TX,?,3,(C1*T1+C2*T2+C3*T3+C4*T4+C5*T5) ConditionsUOCondition-&sUnit,&sOperation,&sCondition,@sType,@rValue,@sValue !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Cost Data (Pricing) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • 8.
    &sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight &sUnit,&sOperation,&sCondition,@rConditionPro_Weight,@rConditionPer1_Weight,@rConditionPer2_Weight,@rConditionPen_Weight !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Content Data (Past, Present Provisos) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time SLAB,,T2,100.0,0.0 SLAB,,T3,100.0,0.0 SLAB,,T4,100.0,0.0 &sUnit,&sOperation,&sCondition,@rCondition_Value,@rStart_Time !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Command Data (Future Provisos) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! &sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time SLAB,,1,1,BEGIN,END &sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time