CMSlv: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| (5 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{solvers}} | {{solvers}} | ||
{{stub}} | {{stub}} | ||
This is the [[conditional modelling]] solver implemented by Vicente Rico-Ramirez< | This is the [[conditional modelling]] solver implemented by Vicente Rico-Ramirez<ref>http://ascend.cheme.cmu.edu/ftp/pdfThesis/victhesis.pdf</ref>. 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]]. | ||
[[File:cmslv.png|thumb|500px|none|Implementation of CMSlv (from Vicente Rico-Ramirez' thesis, see our [[publications]]).]] | |||
== Example == | == Example == | ||
| Line 7: | Line 9: | ||
Here is an extract of a full example called {{src|models/linmassbal.a4c}}: | Here is an extract of a full example called {{src|models/linmassbal.a4c}}: | ||
<source lang="a4c">(* Boundaries *) | <source lang="a4c"> | ||
(* Boundaries *) | |||
CONDITIONAL | CONDITIONAL | ||
cond1: Fmain | cond1: Fmain <= B[1]; | ||
cond2: Fmain >= B[2]; | |||
cond2: Fmain | |||
END CONDITIONAL; | END CONDITIONAL; | ||
| Line 19: | Line 21: | ||
(* Variant Equations *) | (* Variant Equations *) | ||
eq1a: Fsub1 = a[1] * Fmain; | eq1a: Fsub1 = a[1] * Fmain; | ||
eq1b: Fsub2 = b[1] * Fmain; | eq1b: Fsub2 = b[1] * Fmain; | ||
eq2a: Fsub1 = a[2] * Fmain; | eq2a: Fsub1 = a[2] * Fmain; | ||
eq2b: Fsub2 = b[2] * Fmain; | eq2b: Fsub2 = b[2] * Fmain; | ||
eq3a: Fsub1 = a[3] * Fmain; | eq3a: Fsub1 = a[3] * Fmain; | ||
eq3b: Fsub2 = b[3] * Fmain; | eq3b: Fsub2 = b[3] * Fmain; | ||
(* Disjunctive Statements *) | (* Disjunctive Statements *) | ||
WHEN (bol1,bol2) | WHEN (bol1,bol2) | ||
CASE TRUE,FALSE: | CASE TRUE,FALSE: | ||
USE eq1a; | USE eq1a; | ||
USE eq1b; | USE eq1b; | ||
CASE FALSE,FALSE: | CASE FALSE,FALSE: | ||
USE eq2a; | USE eq2a; | ||
USE eq2b; | USE eq2b; | ||
CASE FALSE,TRUE: | CASE FALSE,TRUE: | ||
USE eq3a; | USE eq3a; | ||
USE eq3b; | USE eq3b; | ||
END WHEN;</source> | END WHEN; | ||
</source> | |||
== References == | == References == | ||
<references/> | |||
[[Category:NLA Solvers]] | |||
Latest revision as of 10:54, 1 April 2015
| 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;