CMSlv
From ASCEND
NLA |
---|
QRSlv |
CMSlv |
IPSlv |
NLP |
CONOPT |
IPOPT |
TRON |
MINOS |
Opt |
NGSlv |
DAE/ODE |
IDA |
LSODE |
DOPRI5 |
RADAU5 |
LA |
Linsolqr |
Linsol |
LP |
MakeMPS |
Logic |
LRSlv |
This is the conditional modelling solver implemented by Vicente Rico-Ramirez^{[1]}. Currently this solver is fully operational -- it solves the sample models given in Vicente's thesis, and these have been incorporated in the the TestSuite. You need to have CONOPT installed before CMSlv will work; it's used as part of the boundary-crossing algorithm. CMSlv also makes use of a subsidiary logical-expression-solvers called LRSlv.
Example
Here is an extract of a full example called models/linmassbal.a4c:
(* Boundaries *) CONDITIONAL cond1: Fmain <= B[1]; cond2: Fmain >= B[2]; END CONDITIONAL; bol1 == SATISFIED(cond1,1e-08{lb_mole/hour}); bol2 == SATISFIED(cond2,1e-08{lb_mole/hour}); (* Variant Equations *) eq1a: Fsub1 = a[1] * Fmain; eq1b: Fsub2 = b[1] * Fmain; eq2a: Fsub1 = a[2] * Fmain; eq2b: Fsub2 = b[2] * Fmain; eq3a: Fsub1 = a[3] * Fmain; eq3b: Fsub2 = b[3] * Fmain; (* Disjunctive Statements *) WHEN (bol1,bol2) CASE TRUE,FALSE: USE eq1a; USE eq1b; CASE FALSE,FALSE: USE eq2a; USE eq2b; CASE FALSE,TRUE: USE eq3a; USE eq3b; END WHEN;