/[ascend]/trunk/doc/syntax.lyx
ViewVC logotype

Contents of /trunk/doc/syntax.lyx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2785 - (show annotations) (download) (as text)
Mon Jun 23 08:17:49 2014 UTC (10 years, 1 month ago) by jpye
File MIME type: application/x-lyx
File size: 203712 byte(s)
updating RPM spec for Fed20
1 #LyX 2.1 created this file. For more info see http://www.lyx.org/
2 \lyxformat 474
3 \begin_document
4 \begin_header
5 \textclass book
6 \begin_preamble
7 \usepackage[bookmarks]{hyperref}
8 \usepackage{lmodern}
9 \end_preamble
10 \use_default_options false
11 \maintain_unincluded_children false
12 \language english
13 \language_package default
14 \inputencoding auto
15 \fontencoding global
16 \font_roman default
17 \font_sans default
18 \font_typewriter default
19 \font_math auto
20 \font_default_family default
21 \use_non_tex_fonts false
22 \font_sc false
23 \font_osf false
24 \font_sf_scale 100
25 \font_tt_scale 100
26 \graphics default
27 \default_output_format default
28 \output_sync 0
29 \bibtex_command default
30 \index_command default
31 \paperfontsize default
32 \spacing single
33 \use_hyperref false
34 \papersize default
35 \use_geometry false
36 \use_package amsmath 1
37 \use_package amssymb 1
38 \use_package cancel 1
39 \use_package esint 0
40 \use_package mathdots 0
41 \use_package mathtools 1
42 \use_package mhchem 0
43 \use_package stackrel 1
44 \use_package stmaryrd 1
45 \use_package undertilde 1
46 \cite_engine basic
47 \cite_engine_type default
48 \biblio_style plain
49 \use_bibtopic false
50 \use_indices false
51 \paperorientation portrait
52 \suppress_date false
53 \justification true
54 \use_refstyle 0
55 \index Index
56 \shortcut idx
57 \color #008000
58 \end_index
59 \secnumdepth 3
60 \tocdepth 3
61 \paragraph_separation indent
62 \paragraph_indentation default
63 \quotes_language english
64 \papercolumns 1
65 \papersides 1
66 \paperpagestyle default
67 \tracking_changes false
68 \output_changes false
69 \html_math_output 0
70 \html_css_as_file 0
71 \html_be_strict false
72 \end_header
73
74 \begin_body
75
76 \begin_layout Chapter
77 Syntax reference
78 \begin_inset CommandInset label
79 LatexCommand label
80 name "cha:ASCENDSyntax"
81
82 \end_inset
83
84
85 \end_layout
86
87 \begin_layout Standard
88 We shall present an informal description of the ASCEND IV language.
89 Being informal, we shall usually include examples and descriptions of the
90 intended semantics along with the syntax of the items.
91 At times the inclusion of semantics will seem to anticipate later definitions.
92 We do this because we would also like this chapter to be used as a reference
93 for the ASCEND language even after one generally understands it.
94 Often one will need to clarify a point about a particular item and will
95 not wish to have to search in several places to do so.
96 \end_layout
97
98 \begin_layout Standard
99 Syntax
100 \begin_inset Index idx
101 status collapsed
102
103 \begin_layout Plain Layout
104 syntax
105 \end_layout
106
107 \end_inset
108
109 is the form or structure for the statements in ASCEND, where one worries
110 about the exact words one uses, their ordering, the punctuation, etc.
111 Semantics
112 \begin_inset Index idx
113 status collapsed
114
115 \begin_layout Plain Layout
116 semantics
117 \end_layout
118
119 \end_inset
120
121 describe the meaning of a statement.
122 \end_layout
123
124 \begin_layout Standard
125 To distinguish between syntax and semantics, consider the statement
126 \end_layout
127
128 \begin_layout LyX-Code
129 y IS_A fraction;
130 \end_layout
131
132 \begin_layout Standard
133 Rules on the syntax for this statement tell us we need a user supplied instance
134 name, y, followed by the ASCEND operator IS_A, followed by a type name
135 (fraction).
136 The statement terminates with a semicolon.
137 The statement semantics says we are declaring the existence of an instance,
138 locally named y, of the type fraction as a part within the current model
139 definition and it is to be constructed when an instance of the current
140 model definition is constructed.
141 \end_layout
142
143 \begin_layout Standard
144 The syntax for a computer language is often defined by using a Bachus-Naur
145 \begin_inset Index idx
146 status collapsed
147
148 \begin_layout Plain Layout
149 Bachus-Naur
150 \end_layout
151
152 \end_inset
153
154 formal (BNF
155 \begin_inset Index idx
156 status collapsed
157
158 \begin_layout Plain Layout
159 BNF
160 \end_layout
161
162 \end_inset
163
164 ) description.
165 The complete YACC
166 \begin_inset Index idx
167 status collapsed
168
169 \begin_layout Plain Layout
170 YACC
171 \end_layout
172
173 \end_inset
174
175 and FLEX
176 \begin_inset Index idx
177 status collapsed
178
179 \begin_layout Plain Layout
180 FLEX
181 \end_layout
182
183 \end_inset
184
185 description of the language described (as presently implemented) is available
186 by FTP and via the World Wide Web.
187 The semantics of a very high level modeling language such as ASCEND IV
188 are generally much more restrictive than the syntax.
189 For this reason we do not include a BNF description in this paper.
190 ASCEND IV is an experiment.
191 The language is under constant scrutiny and improvement, so this document
192 is under constant revision.
193
194 \end_layout
195
196 \begin_layout Labeling
197 \labelwidthstring 00000.00000.00000.000
198 \begin_inset space ~
199 \end_inset
200
201
202 \end_layout
203
204 \begin_deeper
205 \begin_layout Chapter
206 Preliminaries
207 \end_layout
208
209 \begin_layout Standard
210 We will start off with some background information and some tips that make
211 the rest of the chapter easier to read.
212 ASCEND is an object-oriented (OO) language for hierarchical modeling that
213 has been somewhat specialized for mathematical models.
214 Most of the specialization is in the implementation and the user interface
215 rather than the language definition.
216
217 \end_layout
218
219 \begin_layout Standard
220 We feel the single most distinguishing feature of mathematical models is
221 that solving them efficiently requires that the solving algorithms be able
222 to address the entire problem either simultaneously or in a decomposition
223 of the natural problem structure that the algorithm determines is best
224 for the machine(s) in use.
225 In the ASCEND language object-orientation is used to organize natural structure
226 s and make them easier to understand.
227 It is not used to hide the details of the objects.
228 The user (or machine) is free to ignore uninteresting details, and the
229 ASCEND environment provides tools for the runtime suppression of these.
230 \end_layout
231
232 \begin_layout Standard
233 ASCEND is well into its 4th generation.
234 Some features we will describe are not yet implemented (some merely speculative
235 ) and these are clearly marked (* 4+ *).
236 Any feature not marked (* 4+ *)has been completely implemented, and thus
237 any mismatch between the description given here and the software we distribute
238 is a bug we want you to tell us about.
239
240 \end_layout
241
242 \begin_layout Standard
243 The syntax and semantics of ASCEND may seem at first a bit unusual.
244 However, do not be afraid to just try what comes naturally if what we write
245 here is unclear.
246 The parser and compiler of ASCEND IV really will help you get things right.
247 Of course if what we write here is unclear, please ask us about it because
248 we aim to continuously improve both this document and the language system
249 it describes.
250 \end_layout
251
252 \begin_layout Standard
253 We will describe, starting in Section
254 \begin_inset CommandInset ref
255 LatexCommand vref
256 reference "sub:x.1.2Basic-Elements"
257
258 \end_inset
259
260 , the higher level concepts of ASCEND, but first some important punctuation
261 rules.
262 \end_layout
263
264 \end_deeper
265 \begin_layout Labeling
266 \labelwidthstring 00000.00000.00000.000
267 ASCEND
268 \begin_inset space ~
269 \end_inset
270
271 is
272 \begin_inset space ~
273 \end_inset
274
275 cAsE
276 \begin_inset space ~
277 \end_inset
278
279 sensitive
280 \begin_inset Index idx
281 status collapsed
282
283 \begin_layout Plain Layout
284 case sensitive
285 \end_layout
286
287 \end_inset
288
289 !
290 \end_layout
291
292 \begin_deeper
293 \begin_layout Standard
294 The keywords that are shown capitalized (or in lower case) in this chapter
295 are that way because ASCEND is case sensitive.
296 IS_A is an ASCEND keyword; isa, Is_a, and all the other permutations you
297 can think of are NOT equivalent to IS_A.
298 In declaring new types of models and variables the user is free to use
299 any style of capitalization he or she may prefer; however, they must remain
300 consistent or undefined types and instances will result.
301 \end_layout
302
303 \begin_layout Standard
304 This case restriction makes our code very readable, but hard to type without
305 a smart editor.
306 We have kept the case-sensitivity because, like all mathematicians, we
307 find ourselves running out of good variable names if we are restricted
308 to a 26 letter alphabet.
309 We have developed smart add-ins for two UNIX editors, EMACS
310 \begin_inset Index idx
311 status collapsed
312
313 \begin_layout Plain Layout
314 EMACS
315 \end_layout
316
317 \end_inset
318
319 and vi
320 \begin_inset Index idx
321 status collapsed
322
323 \begin_layout Plain Layout
324 vi
325 \end_layout
326
327 \end_inset
328
329 , for handling the upper case keywords and some other syntax elements.
330 The use of these editors is described in another chapter.
331
332 \end_layout
333
334 \begin_layout Standard
335 The ASCEND IV parser is very picky and pedantic.
336 It also tries to give helpful messages and occasionally even suggestions.
337 New users should just dive in and make errors, letting the system help
338 them learn how to avoid errors.
339 \end_layout
340
341 \begin_layout Section
342 Punctuation
343 \begin_inset Index idx
344 status collapsed
345
346 \begin_layout Plain Layout
347 punctuation
348 \end_layout
349
350 \end_inset
351
352
353 \end_layout
354
355 \end_deeper
356 \begin_layout Standard
357 This section covers both the punctuation that must be understood to read
358 this document and the punctuation of ASCEND code.
359 \end_layout
360
361 \begin_layout Labeling
362 \labelwidthstring 00000.00000.00000.000
363 keywords
364 \begin_inset Index idx
365 status collapsed
366
367 \begin_layout Plain Layout
368 keywords
369 \end_layout
370
371 \end_inset
372
373 : ASCEND keywords and type names are given in the left column in bold format.
374 It is generally clear from the main text which are keywords and which are
375 type names.
376 \end_layout
377
378 \begin_layout Labeling
379 \labelwidthstring 00000.00000.00000.000
380
381 \bar under
382 Minor
383 \begin_inset space ~
384 \end_inset
385
386 items:
387 \bar default
388 Minor headings that are helpful in finding details are given in the left
389 column in underline format.
390 \end_layout
391
392 \begin_layout Labeling
393 \labelwidthstring 00000.00000.00000.000
394 Tips: Special notes and hints are sometimes placed on the left.
395 \end_layout
396
397 \begin_layout Labeling
398 \labelwidthstring 00000.00000.00000.000
399
400 \bar under
401 LHS
402 \begin_inset Index idx
403 status collapsed
404
405 \begin_layout Plain Layout
406 LHS
407 \end_layout
408
409 \end_inset
410
411 :
412 \bar default
413 Left Hand Side.
414 Abbreviation used frequently.
415 \end_layout
416
417 \begin_layout Labeling
418 \labelwidthstring 00000.00000.00000.000
419
420 \bar under
421 RHS
422 \begin_inset Index idx
423 status collapsed
424
425 \begin_layout Plain Layout
426 RHS
427 \end_layout
428
429 \end_inset
430
431 :
432 \bar default
433 Right Hand Side.
434 Abbreviation used frequently.
435 \end_layout
436
437 \begin_layout Labeling
438 \labelwidthstring 00000.00000.00000.000
439
440 \bar under
441 Simple
442 \begin_inset space ~
443 \end_inset
444
445 names
446 \begin_inset Index idx
447 status collapsed
448
449 \begin_layout Plain Layout
450 simple names
451 \end_layout
452
453 \end_inset
454
455 :
456 \bar default
457 In ASCEND simple names are made of the characters a through z, A through
458 Z, _, (*4+*: $).
459 The underscore is used as a letter, but it cannot be the first letter in
460 a name.
461 The $
462 \begin_inset Index idx
463 status collapsed
464
465 \begin_layout Plain Layout
466 \begin_inset ERT
467 status collapsed
468
469 \begin_layout Plain Layout
470
471
472 \backslash
473 $
474 \end_layout
475
476 \end_inset
477
478
479 \end_layout
480
481 \end_inset
482
483 character is used exclusively as the first character in the name of system
484 defined built-in parts.
485 "$" is explained in more detail in Section
486 \begin_inset CommandInset ref
487 LatexCommand vref
488 reference "sub:x.6.2Supported-attributes"
489
490 \end_inset
491
492 .
493 Simple names should be no more than 80 characters long.
494
495 \end_layout
496
497 \begin_layout Labeling
498 \labelwidthstring 00000.00000.00000.000
499
500 \bar under
501 Compound
502 \begin_inset space ~
503 \end_inset
504
505 names
506 \begin_inset Index idx
507 status collapsed
508
509 \begin_layout Plain Layout
510 compound names
511 \end_layout
512
513 \end_inset
514
515 :
516 \bar default
517 Compound names are simple names strung together with dots (.).
518 See the description of "." below.
519 \end_layout
520
521 \begin_layout Labeling
522 \labelwidthstring 00000.00000.00000.000
523
524 \bar under
525 Groupings:
526 \end_layout
527
528 \begin_layout Labeling
529 \labelwidthstring 00000.00000.00000.000
530
531 \bar under
532 «
533 \begin_inset space ~
534 \end_inset
535
536 »
537 \bar default
538 In documentation
539 \series bold
540 optional fields
541 \series default
542
543 \begin_inset Index idx
544 status collapsed
545
546 \begin_layout Plain Layout
547 optional fields
548 \end_layout
549
550 \end_inset
551
552 are surrounded by these markers.
553 \end_layout
554
555 \begin_layout Labeling
556 \labelwidthstring 00000.00000.00000.000
557
558 \family typewriter
559 (*
560 \begin_inset space ~
561 \end_inset
562
563 *)
564 \family default
565
566 \begin_inset Index idx
567 status collapsed
568
569 \begin_layout Plain Layout
570 (* *)
571 \end_layout
572
573 \end_inset
574
575 Comment.
576 Anything inside these is a comment.
577 Comments can nest
578 \begin_inset Index idx
579 status collapsed
580
581 \begin_layout Plain Layout
582 nest
583 \end_layout
584
585 \end_inset
586
587 in ASCEND and span several lines.
588 \end_layout
589
590 \begin_layout Labeling
591 \labelwidthstring 00000.00000.00000.000
592
593 \family typewriter
594 (
595 \begin_inset space ~
596 \end_inset
597
598 )
599 \family default
600
601 \begin_inset Index idx
602 status collapsed
603
604 \begin_layout Plain Layout
605 ( )
606 \end_layout
607
608 \end_inset
609
610 Rounded parentheses
611 \begin_inset Index idx
612 status collapsed
613
614 \begin_layout Plain Layout
615 parentheses
616 \end_layout
617
618 \end_inset
619
620
621 \begin_inset Index idx
622 status collapsed
623
624 \begin_layout Plain Layout
625 rounded parentheses
626 \end_layout
627
628 \end_inset
629
630 .
631 Used to enclose arguments for functions or models where the order of the
632 arguments matters.
633 Also used to group terms in complex arithmetic, logical, or set expressions
634 where the order of operations needs to be specified.
635
636 \end_layout
637
638 \begin_layout Labeling
639 \labelwidthstring 00000.00000.00000.000
640 Efficiency
641 \begin_inset space ~
642 \end_inset
643
644 tip: The compiler can simplify relation definitions in a particularly efficient
645 manner if constants are grouped together.
646 \end_layout
647
648 \begin_layout Labeling
649 \labelwidthstring 00000.00000.00000.000
650
651 \family typewriter
652 {
653 \begin_inset space ~
654 \end_inset
655
656 }
657 \family default
658
659 \begin_inset Index idx
660 status collapsed
661
662 \begin_layout Plain Layout
663 \begin_inset ERT
664 status collapsed
665
666 \begin_layout Plain Layout
667
668 {
669 \end_layout
670
671 \end_inset
672
673
674 \begin_inset ERT
675 status collapsed
676
677 \begin_layout Plain Layout
678
679 }
680 \end_layout
681
682 \end_inset
683
684
685 \end_layout
686
687 \end_inset
688
689 Curly braces
690 \begin_inset Index idx
691 status collapsed
692
693 \begin_layout Plain Layout
694 Curly braces
695 \end_layout
696
697 \end_inset
698
699 .
700 Used to enclose units.
701 For example, 1 {kg_mole/s}.
702 Also used to enclose the body of annotations.
703 Note: Curly braces are also used in TCL, the language of the ASCEND user
704 interface, about which we will say more in another chapter.
705 \end_layout
706
707 \begin_layout Labeling
708 \labelwidthstring 00000.00000.00000.000
709
710 \family typewriter
711 [
712 \begin_inset space ~
713 \end_inset
714
715 ]
716 \family default
717
718 \begin_inset Index idx
719 status collapsed
720
721 \begin_layout Plain Layout
722 [ ]
723 \end_layout
724
725 \end_inset
726
727 Square brackets
728 \begin_inset Index idx
729 status collapsed
730
731 \begin_layout Plain Layout
732 square brackets
733 \end_layout
734
735 \end_inset
736
737 .
738 Used to enclose sets or elements of sets.
739 Examples: my_integer_set :== [1,2,3], demonstrates the use of square brackets
740 in the assignment of a set.
741 My_array[1] demonstrates the use of square brackets in naming an array
742 object indexed over an integer set which includes the element 1.
743 \end_layout
744
745 \begin_layout Labeling
746 \labelwidthstring 00000.00000.00000.000
747
748 \family typewriter
749 .
750 \family default
751
752 \begin_inset Index idx
753 status collapsed
754
755 \begin_layout Plain Layout
756 .
757 \end_layout
758
759 \end_inset
760
761 Dot
762 \begin_inset Index idx
763 status collapsed
764
765 \begin_layout Plain Layout
766 dot
767 \end_layout
768
769 \end_inset
770
771 .
772 The dot is used, as in PASCAL and C, to construct the names of nested objects.
773 Examples: if object a has a part b, then the way to refer to b is as a.b.
774 Tray[1].vle shows a dot following a square bracket; here Tray[1] has a part
775 named vle.
776 \end_layout
777
778 \begin_layout Labeling
779 \labelwidthstring 00000.00000.00000.000
780
781 \family typewriter
782 ..
783 \family default
784
785 \begin_inset Index idx
786 status collapsed
787
788 \begin_layout Plain Layout
789 ..
790 \end_layout
791
792 \end_inset
793
794 Dot-dot or double dot
795 \begin_inset Index idx
796 status collapsed
797
798 \begin_layout Plain Layout
799 double dot
800 \end_layout
801
802 \end_inset
803
804 .
805 Integer range shorthand.
806 For example, my_integer_set :== [1,2,3] and my_integer_set :== [1..3] are
807 equivalent.
808 If ..
809 appears in a context requiring (), such as the ALIASES/IS_A statement,
810 then the range is expanded and ordered as we would naturally expect.
811 \end_layout
812
813 \begin_layout Labeling
814 \labelwidthstring 00000.00000.00000.000
815
816 \family typewriter
817 :
818 \family default
819
820 \begin_inset Index idx
821 status collapsed
822
823 \begin_layout Plain Layout
824 :
825 \end_layout
826
827 \end_inset
828
829 Colon
830 \begin_inset Index idx
831 status collapsed
832
833 \begin_layout Plain Layout
834 colon
835 \end_layout
836
837 \end_inset
838
839 .
840 A separator used in various ways, principally to set the name of an arithmetic
841 relation apart from the definition.
842 \end_layout
843
844 \begin_layout Labeling
845 \labelwidthstring 00000.00000.00000.000
846
847 \family typewriter
848 ::
849 \family default
850
851 \begin_inset Index idx
852 status collapsed
853
854 \begin_layout Plain Layout
855 ::
856 \end_layout
857
858 \end_inset
859
860 Double colon
861 \begin_inset Index idx
862 status collapsed
863
864 \begin_layout Plain Layout
865 double colon
866 \end_layout
867
868 \end_inset
869
870 .
871 A separator used in the methods section for accessing methods defined on
872 types other than the type the method is part of.
873 Explained in Section
874 \begin_inset CommandInset ref
875 LatexCommand vref
876 reference "sec:x.4Procedural-statements"
877
878 \end_inset
879
880 .[
881 \end_layout
882
883 \begin_layout Labeling
884 \labelwidthstring 00000.00000.00000.000
885
886 \family typewriter
887 ;
888 \family default
889
890 \begin_inset Index idx
891 status collapsed
892
893 \begin_layout Plain Layout
894 ;
895 \end_layout
896
897 \end_inset
898
899 Semicolon
900 \begin_inset Index idx
901 status collapsed
902
903 \begin_layout Plain Layout
904 semicolon
905 \end_layout
906
907 \end_inset
908
909 .
910 The separator of statements.
911 \end_layout
912
913 \begin_deeper
914 \begin_layout Section
915 Basic Elements
916 \begin_inset Index idx
917 status collapsed
918
919 \begin_layout Plain Layout
920 basic elements
921 \end_layout
922
923 \end_inset
924
925
926 \begin_inset CommandInset label
927 LatexCommand label
928 name "sub:x.1.2Basic-Elements"
929
930 \end_inset
931
932
933 \end_layout
934
935 \end_deeper
936 \begin_layout Labeling
937 \labelwidthstring 00000.00000.00000.000
938
939 \bar under
940 Boolean
941 \begin_inset space ~
942 \end_inset
943
944 value
945 \bar default
946
947 \begin_inset Index idx
948 status collapsed
949
950 \begin_layout Plain Layout
951 value, Boolean
952 \end_layout
953
954 \end_inset
955
956
957 \begin_inset Index idx
958 status collapsed
959
960 \begin_layout Plain Layout
961 Boolean value
962 \end_layout
963
964 \end_inset
965
966
967 \family sans
968 TRUE
969 \family default
970
971 \begin_inset Index idx
972 status collapsed
973
974 \begin_layout Plain Layout
975 TRUE
976 \end_layout
977
978 \end_inset
979
980 or
981 \family sans
982 FALSE
983 \family default
984
985 \begin_inset Index idx
986 status collapsed
987
988 \begin_layout Plain Layout
989 FALSE
990 \end_layout
991
992 \end_inset
993
994 .
995 Can't get much simpler, eh? In the language definition
996 \family sans
997 TRUE
998 \family default
999 and
1000 \family sans
1001 FALSE
1002 \family default
1003 do not map to 1 and 0 or any other type of numeric value.
1004 (In the implementation, of course, they do.)
1005 \end_layout
1006
1007 \begin_layout Labeling
1008 \labelwidthstring 00000.00000.00000.000
1009 User
1010 \begin_inset space ~
1011 \end_inset
1012
1013 interface
1014 \begin_inset space ~
1015 \end_inset
1016
1017 tip: The ASCEND user interface programmers have found it very convenient,
1018 however, to allow T/F, 1/0, Y/N, and other obvious boolean conventions
1019 as interactive input when assigning boolean values.
1020 We are lazy users.
1021 \end_layout
1022
1023 \begin_layout Labeling
1024 \labelwidthstring 00000.00000.00000.000
1025
1026 \bar under
1027 Integer
1028 \begin_inset space ~
1029 \end_inset
1030
1031 value
1032 \bar default
1033
1034 \begin_inset Index idx
1035 status collapsed
1036
1037 \begin_layout Plain Layout
1038 value, integer
1039 \end_layout
1040
1041 \end_inset
1042
1043
1044 \begin_inset Index idx
1045 status collapsed
1046
1047 \begin_layout Plain Layout
1048 integer value
1049 \end_layout
1050
1051 \end_inset
1052
1053 A signed whole number up to the maximum that can be represented by the
1054 computer on which one is running ASCEND.
1055
1056 \family sans
1057 MAX_INTEGER
1058 \family default
1059
1060 \begin_inset Index idx
1061 status collapsed
1062
1063 \begin_layout Plain Layout
1064 MAX
1065 \begin_inset ERT
1066 status collapsed
1067
1068 \begin_layout Plain Layout
1069
1070
1071 \backslash
1072 _
1073 \end_layout
1074
1075 \end_inset
1076
1077 INTEGER
1078 \end_layout
1079
1080 \end_inset
1081
1082 is machine dependent.
1083 Examples are:
1084 \end_layout
1085
1086 \begin_deeper
1087 \begin_layout LyX-Code
1088 \align block
1089 123
1090 \end_layout
1091
1092 \begin_layout LyX-Code
1093 \align block
1094 -5
1095 \end_layout
1096
1097 \begin_layout LyX-Code
1098 \align block
1099 MAX_INTEGER, typically 2147483647.
1100 \end_layout
1101
1102 \end_deeper
1103 \begin_layout Labeling
1104 \labelwidthstring 00000.00000.00000.000
1105
1106 \bar under
1107 Real
1108 \begin_inset space ~
1109 \end_inset
1110
1111 value
1112 \bar default
1113
1114 \begin_inset Index idx
1115 status collapsed
1116
1117 \begin_layout Plain Layout
1118 value.
1119 real
1120 \end_layout
1121
1122 \end_inset
1123
1124
1125 \begin_inset Index idx
1126 status collapsed
1127
1128 \begin_layout Plain Layout
1129 real value
1130 \end_layout
1131
1132 \end_inset
1133
1134 ASCEND represents reals almost exactly as any other mathematically oriented
1135 programming language does.
1136 The mantissa
1137 \begin_inset Index idx
1138 status collapsed
1139
1140 \begin_layout Plain Layout
1141 mantissa
1142 \end_layout
1143
1144 \end_inset
1145
1146 has an optional negative sign followed by a string of digits and at most
1147 one decimal point.
1148 The exponent is the letter
1149 \family typewriter
1150 e
1151 \family default
1152 or
1153 \family typewriter
1154 E
1155 \family default
1156 followed by an integer.
1157 The number must not exceed the largest the computer is able to handle.
1158 There can be no blank characters in a real.
1159
1160 \family sans
1161 MAX_REAL
1162 \family default
1163
1164 \begin_inset Index idx
1165 status collapsed
1166
1167 \begin_layout Plain Layout
1168 MAX
1169 \begin_inset ERT
1170 status collapsed
1171
1172 \begin_layout Plain Layout
1173
1174
1175 \backslash
1176 _
1177 \end_layout
1178
1179 \end_inset
1180
1181 REAL
1182 \end_layout
1183
1184 \end_inset
1185
1186 is machine dependent.
1187 The following are legitimate reals in ASCEND:
1188 \end_layout
1189
1190 \begin_deeper
1191 \begin_layout LyX-Code
1192 \align block
1193 -1
1194 \end_layout
1195
1196 \begin_layout LyX-Code
1197 \align block
1198 1.2
1199 \end_layout
1200
1201 \begin_layout LyX-Code
1202 \align block
1203 1.3e-2
1204 \end_layout
1205
1206 \begin_layout LyX-Code
1207 \align block
1208 7.888888e+34
1209 \end_layout
1210
1211 \begin_layout LyX-Code
1212 \align block
1213 .6E21
1214 \end_layout
1215
1216 \begin_layout LyX-Code
1217 \align block
1218 MAX_REAL, typically about 1.79E+308.
1219 \end_layout
1220
1221 \begin_layout Standard
1222 while the following are not:
1223 \end_layout
1224
1225 \begin_layout LyX-Code
1226 \align block
1227 1.
1228 2 (*contains a blank within it*)
1229 \end_layout
1230
1231 \begin_layout LyX-Code
1232 \align block
1233 1.3e2.0 (*exponent has a decimal in it*)
1234 \end_layout
1235
1236 \begin_layout LyX-Code
1237
1238 \family typewriter
1239 +1.3 (* illegal unary + sign.
1240 x = +1.3 not allowed*)
1241 \end_layout
1242
1243 \end_deeper
1244 \begin_layout Labeling
1245 \labelwidthstring 00000.00000.00000.000
1246
1247 \bar under
1248 Reals
1249 \begin_inset space ~
1250 \end_inset
1251
1252 stored
1253 \begin_inset space ~
1254 \end_inset
1255
1256 in
1257 \begin_inset space ~
1258 \end_inset
1259
1260 SI
1261 \begin_inset Index idx
1262 status collapsed
1263
1264 \begin_layout Plain Layout
1265 SI
1266 \end_layout
1267
1268 \end_inset
1269
1270
1271 \begin_inset space ~
1272 \end_inset
1273
1274 units
1275 \bar default
1276
1277 \end_layout
1278
1279 \begin_deeper
1280 \begin_layout Standard
1281 We store all real values as double precision
1282 \begin_inset Index idx
1283 status collapsed
1284
1285 \begin_layout Plain Layout
1286 double precision
1287 \end_layout
1288
1289 \end_inset
1290
1291 numbers in the metre-kilogram-second (MKS)
1292 \begin_inset Index idx
1293 status collapsed
1294
1295 \begin_layout Plain Layout
1296 MKS
1297 \end_layout
1298
1299 \end_inset
1300
1301 system of units.
1302 This eliminates many common errors in the modeling of physical systems.
1303 Since we also place the burden of scaling equations on system routines
1304 and a simple modeling methodology, the internal units are not of concern
1305 to most users.
1306 \end_layout
1307
1308 \end_deeper
1309 \begin_layout Labeling
1310 \labelwidthstring 00000.00000.00000.000
1311
1312 \bar under
1313 Dimensionality
1314 \begin_inset Index idx
1315 status collapsed
1316
1317 \begin_layout Plain Layout
1318 dimensionality
1319 \end_layout
1320
1321 \end_inset
1322
1323 :
1324 \bar default
1325 Real values have dimensionality such as length/time for velocity.
1326
1327 \series bold
1328 Dimensionality
1329 \series default
1330 is to be distinguished from the
1331 \series bold
1332 units
1333 \series default
1334 such as ft/s.
1335 ASCEND takes care of mapping between units
1336 \begin_inset Index idx
1337 status collapsed
1338
1339 \begin_layout Plain Layout
1340 units
1341 \end_layout
1342
1343 \end_inset
1344
1345 and dimensions.
1346 A value without units (this includes integer values) is taken to be dimensionle
1347 ss
1348 \begin_inset Index idx
1349 status collapsed
1350
1351 \begin_layout Plain Layout
1352 dimensionless
1353 \end_layout
1354
1355 \end_inset
1356
1357 .
1358 Dimensionality is built up from the following base dimensions:
1359 \end_layout
1360
1361 \begin_layout Labeling
1362 \labelwidthstring 00000.00000.00000.000
1363 Name
1364 \bar under
1365 definition; typical units
1366 \end_layout
1367
1368 \begin_layout Labeling
1369 \labelwidthstring 00000.00000.00000.000
1370 L
1371 \begin_inset Index idx
1372 status collapsed
1373
1374 \begin_layout Plain Layout
1375 L, length dimension
1376 \end_layout
1377
1378 \end_inset
1379
1380 length
1381 \begin_inset Index idx
1382 status collapsed
1383
1384 \begin_layout Plain Layout
1385 length
1386 \end_layout
1387
1388 \end_inset
1389
1390 ; metre, m
1391 \end_layout
1392
1393 \begin_layout Labeling
1394 \labelwidthstring 00000.00000.00000.000
1395 M
1396 \begin_inset Index idx
1397 status collapsed
1398
1399 \begin_layout Plain Layout
1400 M, mass dimension
1401 \end_layout
1402
1403 \end_inset
1404
1405 mass
1406 \begin_inset Index idx
1407 status collapsed
1408
1409 \begin_layout Plain Layout
1410 mass
1411 \end_layout
1412
1413 \end_inset
1414
1415 ; kilogram, kg
1416 \end_layout
1417
1418 \begin_layout Labeling
1419 \labelwidthstring 00000.00000.00000.000
1420 T
1421 \begin_inset Index idx
1422 status collapsed
1423
1424 \begin_layout Plain Layout
1425 T, time dimension
1426 \end_layout
1427
1428 \end_inset
1429
1430 time
1431 \begin_inset Index idx
1432 status collapsed
1433
1434 \begin_layout Plain Layout
1435 time
1436 \end_layout
1437
1438 \end_inset
1439
1440 ; second, s
1441 \end_layout
1442
1443 \begin_layout Labeling
1444 \labelwidthstring 00000.00000.00000.000
1445 E
1446 \begin_inset Index idx
1447 status collapsed
1448
1449 \begin_layout Plain Layout
1450 E, electric current dimension
1451 \end_layout
1452
1453 \end_inset
1454
1455 electric current
1456 \begin_inset Index idx
1457 status collapsed
1458
1459 \begin_layout Plain Layout
1460 electric current
1461 \end_layout
1462
1463 \end_inset
1464
1465 ; ampere, A
1466 \end_layout
1467
1468 \begin_layout Labeling
1469 \labelwidthstring 00000.00000.00000.000
1470 Q
1471 \begin_inset Index idx
1472 status collapsed
1473
1474 \begin_layout Plain Layout
1475 Q, quantity dimension
1476 \end_layout
1477
1478 \end_inset
1479
1480 quantity
1481 \begin_inset Index idx
1482 status collapsed
1483
1484 \begin_layout Plain Layout
1485 quantity
1486 \end_layout
1487
1488 \end_inset
1489
1490 ; mole, mole
1491 \end_layout
1492
1493 \begin_layout Labeling
1494 \labelwidthstring 00000.00000.00000.000
1495 TMP
1496 \begin_inset Index idx
1497 status collapsed
1498
1499 \begin_layout Plain Layout
1500 TMP, temperature dimension
1501 \end_layout
1502
1503 \end_inset
1504
1505 temperature
1506 \begin_inset Index idx
1507 status collapsed
1508
1509 \begin_layout Plain Layout
1510 temperature
1511 \end_layout
1512
1513 \end_inset
1514
1515 ; Kelvin, K
1516 \end_layout
1517
1518 \begin_layout Labeling
1519 \labelwidthstring 00000.00000.00000.000
1520 LUM
1521 \begin_inset Index idx
1522 status collapsed
1523
1524 \begin_layout Plain Layout
1525 LUM, luminous intensity dimension
1526 \end_layout
1527
1528 \end_inset
1529
1530 luminous intensity
1531 \begin_inset Index idx
1532 status collapsed
1533
1534 \begin_layout Plain Layout
1535 luminous intensity
1536 \end_layout
1537
1538 \end_inset
1539
1540 ; candela, cd
1541 \end_layout
1542
1543 \begin_layout Labeling
1544 \labelwidthstring 00000.00000.00000.000
1545 P
1546 \begin_inset Index idx
1547 status collapsed
1548
1549 \begin_layout Plain Layout
1550 P, phase angle dimension
1551 \end_layout
1552
1553 \end_inset
1554
1555 plane angle
1556 \begin_inset Index idx
1557 status collapsed
1558
1559 \begin_layout Plain Layout
1560 plane angle
1561 \end_layout
1562
1563 \end_inset
1564
1565 ; radian, rad
1566 \end_layout
1567
1568 \begin_layout Labeling
1569 \labelwidthstring 00000.00000.00000.000
1570 S
1571 \begin_inset Index idx
1572 status collapsed
1573
1574 \begin_layout Plain Layout
1575 S, solid angle dimension
1576 \end_layout
1577
1578 \end_inset
1579
1580 solid angle
1581 \begin_inset Index idx
1582 status collapsed
1583
1584 \begin_layout Plain Layout
1585 solid angle
1586 \end_layout
1587
1588 \end_inset
1589
1590 ; steradian, srad
1591 \end_layout
1592
1593 \begin_layout Labeling
1594 \labelwidthstring 00000.00000.00000.000
1595 C
1596 \begin_inset Index idx
1597 status collapsed
1598
1599 \begin_layout Plain Layout
1600 C, currency dimension
1601 \end_layout
1602
1603 \end_inset
1604
1605 currency
1606 \begin_inset Index idx
1607 status collapsed
1608
1609 \begin_layout Plain Layout
1610 currency
1611 \end_layout
1612
1613 \end_inset
1614
1615 ; currency, CR
1616 \end_layout
1617
1618 \begin_deeper
1619 \begin_layout Standard
1620 The atom and constant definitions in the library illustrate the use of dimension
1621 ality.
1622 \end_layout
1623
1624 \begin_layout Standard
1625 Dimensions may be any combination of these symbols along with rounded parenthese
1626 s, (), and the operators *,
1627 \family typewriter
1628 ^
1629 \family default
1630 and
1631 \family typewriter
1632 /
1633 \family default
1634 .
1635 Examples include
1636 \family typewriter
1637 M/T
1638 \family default
1639 or
1640 \family typewriter
1641 M*L^2/T^2/TMP
1642 \family default
1643 {this latter means
1644 \family typewriter
1645 (M*(L^2)/(T^2))/TMP
1646 \family default
1647 }.
1648 The second operand for the to-the-power-of operator,
1649 \family typewriter
1650 ^
1651 \family default
1652 , must be an integer value (e.g., -2 or 3) because fractional powers of dimensiona
1653 l numbers are physically undefined
1654 \begin_inset Note Note
1655 status open
1656
1657 \begin_layout Plain Layout
1658 although we do seem them occasionally...
1659 \end_layout
1660
1661 \end_inset
1662
1663 .
1664 \end_layout
1665
1666 \begin_layout Standard
1667 If the dimensionality for a real value is undefined, then ASCEND gives it
1668 a wildcard dimensionality
1669 \begin_inset Index idx
1670 status collapsed
1671
1672 \begin_layout Plain Layout
1673 wild card dimensionality
1674 \end_layout
1675
1676 \end_inset
1677
1678 .
1679 If ASCEND can later deduce its dimensionality from its use in a model definitio
1680 n it will do so.
1681 For example consider the real variable
1682 \family typewriter
1683 a
1684 \family default
1685 , suppose
1686 \family typewriter
1687 a
1688 \family default
1689 has wildcard dimensionality,
1690 \family typewriter
1691 b
1692 \family default
1693 has dimensionality of
1694 \family typewriter
1695 L/T
1696 \family default
1697 .
1698 Then the statement:
1699 \end_layout
1700
1701 \end_deeper
1702 \begin_layout Labeling
1703 \labelwidthstring 00000.00000.00000.000
1704 Example
1705 \begin_inset space ~
1706 \end_inset
1707
1708 of
1709 \begin_inset space ~
1710 \end_inset
1711
1712 a
1713 \begin_inset space ~
1714 \end_inset
1715
1716 dimensionally
1717 \begin_inset space ~
1718 \end_inset
1719
1720 consistent
1721 \begin_inset Index idx
1722 status collapsed
1723
1724 \begin_layout Plain Layout
1725 dimensionally consistent
1726 \end_layout
1727
1728 \end_inset
1729
1730
1731 \begin_inset space ~
1732 \end_inset
1733
1734 equation.
1735
1736 \end_layout
1737
1738 \begin_layout Labeling
1739 \labelwidthstring 00000.00000.00000.000
1740 \begin_inset space ~
1741 \end_inset
1742
1743
1744 \family typewriter
1745 a + b = 3 {ft/s};
1746 \end_layout
1747
1748 \begin_deeper
1749 \begin_layout Standard
1750 requires that
1751 \family typewriter
1752 a
1753 \family default
1754 have the same dimensionality as the other two terms, namely,
1755 \family typewriter
1756 L/T
1757 \family default
1758 .
1759 ASCEND will assign this dimensionality to
1760 \family typewriter
1761 a
1762 \family default
1763 .
1764 The user will be warned of dimensionally inconsistent equations.
1765 \end_layout
1766
1767 \end_deeper
1768 \begin_layout Labeling
1769 \labelwidthstring 00000.00000.00000.000
1770
1771 \bar under
1772 Unit
1773 \begin_inset space ~
1774 \end_inset
1775
1776 expression
1777 \bar default
1778 A unit expression
1779 \begin_inset Index idx
1780 status collapsed
1781
1782 \begin_layout Plain Layout
1783 unit expression
1784 \end_layout
1785
1786 \end_inset
1787
1788 may be composed of any combination of unit names defined by the system
1789 and any numerical constants combined with times (
1790 \family typewriter
1791 *
1792 \family default
1793 ), divide(
1794 \family typewriter
1795 /
1796 \family default
1797 ) and to the power (
1798 \family typewriter
1799 ^
1800 \family default
1801 ) operators.
1802 The RHS of
1803 \family typewriter
1804 ^
1805 \family default
1806 must be an integer.
1807 Parentheses can be used to group subexpressions with the exception that
1808 a divide operator may
1809 \emph on
1810 not
1811 \emph default
1812 be followed by a grouped subexpression.
1813
1814 \end_layout
1815
1816 \begin_deeper
1817 \begin_layout Standard
1818 So,
1819 \family typewriter
1820 {kg/m/s}
1821 \family default
1822 is fine, but
1823 \family typewriter
1824 {kg/(m*s)}
1825 \family default
1826 is not.
1827 Although the two expressions are mathematically equivalent, it makes the
1828 system programming and output formatting easier to code and faster to execute
1829 if we disallow expressions of the latter sort.
1830 \end_layout
1831
1832 \begin_layout Standard
1833 The units understood by the system are defined in the first part of this
1834 manual.
1835 Note that several units defined are really values of interesting constants
1836 in SI, e.g.
1837
1838 \family typewriter
1839 R :== 1{GAS_C}
1840 \family default
1841 yields the correct value of the thermodynamic gas constant.
1842 Users can define additional units.
1843 \end_layout
1844
1845 \end_deeper
1846 \begin_layout Labeling
1847 \labelwidthstring 00000.00000.00000.000
1848
1849 \bar under
1850 Units
1851 \bar default
1852
1853 \begin_inset Index idx
1854 status collapsed
1855
1856 \begin_layout Plain Layout
1857 units
1858 \end_layout
1859
1860 \end_inset
1861
1862 A Unit expression unit expression must be enclosed in curly braces
1863 \family typewriter
1864 {}
1865 \family default
1866 .
1867 When a real number is used in a mathematical expression in ASCEND, it must
1868 have a set of units expressed with it.
1869 If it does not, ASCEND assumes the number is dimensionless, which may not
1870 be the intent of the modeler.
1871 An example is shown in the dimensionally consistent equation above where
1872 the number 3 has the units
1873 \family typewriter
1874 {ft/s}
1875 \family default
1876 associated with it.
1877
1878 \end_layout
1879
1880 \begin_deeper
1881 \begin_layout Standard
1882 Examples:
1883 \end_layout
1884
1885 \begin_layout LyX-Code
1886 \align block
1887 {kg_mole/s/m} same as {(kg_mole/s)/m}
1888 \end_layout
1889
1890 \begin_layout LyX-Code
1891 \align block
1892 {m^3/yr}
1893 \end_layout
1894
1895 \begin_layout LyX-Code
1896 \align block
1897 {3/100*ft} same as {0.03*ft}
1898 \end_layout
1899
1900 \begin_layout LyX-Code
1901 \align block
1902 {s^-1} same as {1/s}
1903 \end_layout
1904
1905 \begin_layout Standard
1906 Illegal unit examples are
1907 \end_layout
1908
1909 \begin_layout LyX-Code
1910 \align block
1911 {m/(K*kg_mole)}
1912 \end_layout
1913
1914 \begin_deeper
1915 \begin_layout Standard
1916 grouped subexpression used in the denominator; should be written {m/K/kg_mole}.
1917 \end_layout
1918
1919 \end_deeper
1920 \begin_layout LyX-Code
1921 \align block
1922 {m^3.5}
1923 \end_layout
1924
1925 \begin_deeper
1926 \begin_layout Standard
1927 power of units or dimensions must be integer.
1928 \end_layout
1929
1930 \end_deeper
1931 \end_deeper
1932 \begin_layout Labeling
1933 \labelwidthstring 00000.00000.00000.000
1934
1935 \bar under
1936 Symbol
1937 \begin_inset space ~
1938 \end_inset
1939
1940 Value
1941 \bar default
1942
1943 \begin_inset Index idx
1944 status collapsed
1945
1946 \begin_layout Plain Layout
1947 value, symbol
1948 \end_layout
1949
1950 \end_inset
1951
1952
1953 \begin_inset Index idx
1954 status collapsed
1955
1956 \begin_layout Plain Layout
1957 symbol value
1958 \end_layout
1959
1960 \end_inset
1961
1962 The format for a symbol is that of an arbitrary character string enclosed
1963 between two single quotes.
1964 There is no way to embed a single quote
1965 \begin_inset Index idx
1966 status collapsed
1967
1968 \begin_layout Plain Layout
1969 '
1970 \end_layout
1971
1972 \end_inset
1973
1974
1975 \begin_inset Index idx
1976 status collapsed
1977
1978 \begin_layout Plain Layout
1979 single quote
1980 \end_layout
1981
1982 \end_inset
1983
1984 in a symbol: we are not in the escape sequence business at this time.
1985 The following are legal symbols in ASCEND:
1986 \end_layout
1987
1988 \begin_deeper
1989 \begin_layout LyX-Code
1990 'H2O'
1991 \end_layout
1992
1993 \begin_layout LyX-Code
1994 'r1'
1995 \end_layout
1996
1997 \begin_layout LyX-Code
1998 'Bill said,foo to whom?'
1999 \end_layout
2000
2001 \begin_layout Standard
2002 while the following are not legal symbol values:
2003 \end_layout
2004
2005 \begin_layout LyX-Code
2006 "ethanol" (double quotes not allowed)
2007 \end_layout
2008
2009 \begin_layout LyX-Code
2010 water (no single quotes given)
2011 \end_layout
2012
2013 \begin_layout LyX-Code
2014 'i can't do this' (no embedded quotes)
2015 \end_layout
2016
2017 \begin_layout Standard
2018 There is an arbitrary upper limit to the number of characters in a symbol
2019 (something like 10,000) so that we may detect a missing close quote in
2020 a bad input file without crashing.
2021 \end_layout
2022
2023 \end_deeper
2024 \begin_layout Labeling
2025 \labelwidthstring 00000.00000.00000.000
2026 Sets
2027 \begin_inset space ~
2028 \end_inset
2029
2030 values
2031 \begin_inset Index idx
2032 status collapsed
2033
2034 \begin_layout Plain Layout
2035 values, set
2036 \end_layout
2037
2038 \end_inset
2039
2040
2041 \begin_inset Index idx
2042 status collapsed
2043
2044 \begin_layout Plain Layout
2045 set values
2046 \end_layout
2047
2048 \end_inset
2049
2050 Set values are lists of elements, all of type
2051 \family sans
2052 integer_constant
2053 \family default
2054 or all of type
2055 \family sans
2056 symbol_constant
2057 \family default
2058 , enclosed between square brackets
2059 \family typewriter
2060 []
2061 \family default
2062 .
2063 The following are examples of sets:
2064 \end_layout
2065
2066 \begin_deeper
2067 \begin_layout LyX-Code
2068 \align block
2069 ['methane', 'ethane', 'propane']
2070 \end_layout
2071
2072 \begin_layout LyX-Code
2073 \align block
2074 [1..5, 7, 15]
2075 \end_layout
2076
2077 \begin_layout LyX-Code
2078 \align block
2079 [2..n_stages]
2080 \end_layout
2081
2082 \begin_layout LyX-Code
2083 \align block
2084 [1, 4, 2, 1, 16]
2085 \end_layout
2086
2087 \begin_layout LyX-Code
2088 \align block
2089 []
2090 \end_layout
2091
2092 \end_deeper
2093 \begin_layout Labeling
2094 \labelwidthstring 00000.00000.00000.000
2095 More
2096 \begin_inset space ~
2097 \end_inset
2098
2099 about
2100 \begin_inset space ~
2101 \end_inset
2102
2103 sets
2104 \begin_inset Index idx
2105 status collapsed
2106
2107 \begin_layout Plain Layout
2108 sets
2109 \end_layout
2110
2111 \end_inset
2112
2113
2114 \begin_inset space ~
2115 \end_inset
2116
2117 in
2118 \begin_inset space ~
2119 \end_inset
2120
2121 Section
2122 \begin_inset space ~
2123 \end_inset
2124
2125
2126 \begin_inset CommandInset ref
2127 LatexCommand vref
2128 reference "sub:x.2.2Sets"
2129
2130 \end_inset
2131
2132 .
2133 \end_layout
2134
2135 \begin_deeper
2136 \begin_layout Standard
2137 The value range
2138 \family typewriter
2139 1..5
2140 \family default
2141 is an allowable shorthand for the integers 1, 2, 3, 4 and 5 while the value
2142 range
2143 \family typewriter
2144 2..n_stages
2145 \family default
2146 (where
2147 \family typewriter
2148 n_stages
2149 \family default
2150 must be of type
2151 \family sans
2152 integer_constant
2153 \family default
2154 ) means all integers from 2 to
2155 \family typewriter
2156 n_stages
2157 \family default
2158 .
2159 If
2160 \family typewriter
2161 n_stages
2162 \family default
2163 is less than 2, then the third set is empty.
2164 The repeated occurrence of
2165 \family typewriter
2166 1
2167 \family default
2168 in the fourth set is ignored.
2169 The fifth set is the empty set
2170 \begin_inset Index idx
2171 status collapsed
2172
2173 \begin_layout Plain Layout
2174 empty set
2175 \end_layout
2176
2177 \end_inset
2178
2179
2180 \begin_inset Index idx
2181 status collapsed
2182
2183 \begin_layout Plain Layout
2184 set, empty
2185 \end_layout
2186
2187 \end_inset
2188
2189 .
2190 \end_layout
2191
2192 \begin_layout Standard
2193 We use the term set in an almost pure mathematical sense.
2194 The elements have no order.
2195 One can only ask two things of a set: (1) if an element is a member of
2196 it and (2) its cardinality
2197 \begin_inset Index idx
2198 status collapsed
2199
2200 \begin_layout Plain Layout
2201 cardinality
2202 \end_layout
2203
2204 \end_inset
2205
2206 (
2207 \family sans
2208 CARD
2209 \family default
2210
2211 \begin_inset Index idx
2212 status collapsed
2213
2214 \begin_layout Plain Layout
2215 CARD
2216 \end_layout
2217
2218 \end_inset
2219
2220
2221 \family typewriter
2222 (set)
2223 \family default
2224 ).
2225 Repeated elements used in defining a set are ignored.
2226 The elements of sets cannot themselves be sets in ASCEND; i.e., there can
2227 be no sets of set.
2228 \end_layout
2229
2230 \end_deeper
2231 \begin_layout Labeling
2232 \labelwidthstring 00000.00000.00000.000
2233 Sets
2234 \begin_inset space ~
2235 \end_inset
2236
2237 are
2238 \begin_inset space ~
2239 \end_inset
2240
2241 unordered.
2242 A set of integers may appear to be ordered to the modeler as the natural
2243 numbers have an order.
2244 However, it is the user imposing and using the ordering, not ASCEND.
2245 ASCEND sees these integers as elements in the set with NO ordering.
2246 Therefore, there are no operators in ASCEND such as successor or precursor
2247 member of a set.
2248 \end_layout
2249
2250 \begin_layout Labeling
2251 \labelwidthstring 00000.00000.00000.000
2252
2253 \bar under
2254 Arrays
2255 \bar default
2256
2257 \begin_inset Index idx
2258 status collapsed
2259
2260 \begin_layout Plain Layout
2261 arrays
2262 \end_layout
2263
2264 \end_inset
2265
2266 An array is a list of instances indexed over a set, in computer-speak,
2267 an associative array of objects.
2268 The instances are all of the same base type (as that is the only way they
2269 can be defined).
2270 An individual member of a list may later be more refined than the other
2271 members (we shall illustrate that possibility).
2272 The following are arrays in ASCEND.
2273 \end_layout
2274
2275 \begin_deeper
2276 \begin_layout LyX-Code
2277 \align block
2278 stage[1..n_stages]
2279 \end_layout
2280
2281 \begin_layout LyX-Code
2282 \align block
2283 y[components]
2284 \end_layout
2285
2286 \begin_layout LyX-Code
2287 \align block
2288 column[areas][processes]
2289 \end_layout
2290
2291 \begin_layout Standard
2292 where components, areas and processes are sets.
2293 For example components could be the set of symbols
2294 \family typewriter
2295 ['ethylene', 'propylene']
2296 \family default
2297 , areas the set of symbols
2298 \family typewriter
2299 ['feed_prep', 'prod_purification']
2300 \family default
2301 while processes could be the set
2302 \family typewriter
2303 ['alcohol_manuf', 'poly_propropylene_manuf']
2304 \family default
2305 .
2306 Note that the third example (
2307 \family typewriter
2308 column
2309 \family default
2310 ) is a list of lists (the way that ASCEND permits a multiply subscripted
2311 array).
2312
2313 \end_layout
2314
2315 \begin_layout Standard
2316 The following are elements in the above arrays:
2317 \end_layout
2318
2319 \begin_layout LyX-Code
2320 stage[1]
2321 \end_layout
2322
2323 \begin_layout LyX-Code
2324 y['ethylene']
2325 \end_layout
2326
2327 \begin_layout LyX-Code
2328 column['feed_prep'][alcohol_manuf']
2329 \end_layout
2330
2331 \begin_layout Standard
2332 provided that
2333 \family typewriter
2334 n_stages
2335 \family default
2336 is 1 or larger.
2337
2338 \end_layout
2339
2340 \begin_layout Standard
2341 There can be any number of subscripts
2342 \begin_inset Index idx
2343 status collapsed
2344
2345 \begin_layout Plain Layout
2346 subscripts
2347 \end_layout
2348
2349 \end_inset
2350
2351 for an array.
2352 We point out, however, that in virtually every application of arrays requiring
2353 more than two subscripts, there is usually a some underlying concept that
2354 is much better modeled as an object than as part of a deeply subscripted
2355 \begin_inset Index idx
2356 status collapsed
2357
2358 \begin_layout Plain Layout
2359 subscripted, deeply
2360 \end_layout
2361
2362 \end_inset
2363
2364
2365 \begin_inset Index idx
2366 status collapsed
2367
2368 \begin_layout Plain Layout
2369 deeply subscripted
2370 \end_layout
2371
2372 \end_inset
2373
2374 array.
2375 In the following jagged array example, there are really the concepts of
2376 unit operation and stream that would be better understood if made explicit.
2377 \end_layout
2378
2379 \end_deeper
2380 \begin_layout Labeling
2381 \labelwidthstring 00000.00000.00000.000
2382
2383 \bar under
2384 Arrays
2385 \begin_inset space ~
2386 \end_inset
2387
2388 can
2389 \begin_inset space ~
2390 \end_inset
2391
2392 be
2393 \begin_inset space ~
2394 \end_inset
2395
2396 jagged
2397 \bar default
2398
2399 \begin_inset CommandInset label
2400 LatexCommand label
2401 name "lyx:Arrays-can-be"
2402
2403 \end_inset
2404
2405 Arrays can be sparse
2406 \begin_inset Index idx
2407 status collapsed
2408
2409 \begin_layout Plain Layout
2410 sparse
2411 \end_layout
2412
2413 \end_inset
2414
2415 or jagged
2416 \begin_inset Index idx
2417 status collapsed
2418
2419 \begin_layout Plain Layout
2420 jagged
2421 \end_layout
2422
2423 \end_inset
2424
2425 .
2426 For example:
2427 \end_layout
2428
2429 \begin_deeper
2430 \begin_layout LyX-Code
2431 process[1..3] IS_A set OF integer;
2432 \end_layout
2433
2434 \begin_layout LyX-Code
2435 process[1] :== [2];
2436 \end_layout
2437
2438 \begin_layout LyX-Code
2439 process[2] :== [7,5,3];
2440 \end_layout
2441
2442 \begin_layout LyX-Code
2443 process[3] :== [4,6];
2444 \end_layout
2445
2446 \begin_layout LyX-Code
2447 FOR i in [1..3] CREATE
2448 \end_layout
2449
2450 \begin_layout LyX-Code
2451 FOR j IN process[i] CREATE
2452 \end_layout
2453
2454 \begin_layout LyX-Code
2455 flow[i][j] IS_A mass;
2456 \end_layout
2457
2458 \begin_layout LyX-Code
2459 END FOR;
2460 \end_layout
2461
2462 \begin_layout LyX-Code
2463 END FOR;
2464 \end_layout
2465
2466 \begin_layout Standard
2467 process is an array of sets (not to be confused with a set of sets which
2468 ASCEND does not have) and flow is an array with six elements spread over
2469 three rows:
2470 \end_layout
2471
2472 \begin_layout LyX-Code
2473 flow[1][2]
2474 \end_layout
2475
2476 \begin_layout LyX-Code
2477 flow[2][7], flow[2][3], flow[2][5]
2478 \end_layout
2479
2480 \begin_layout LyX-Code
2481 flow[3][4], flow[3][6]
2482 \end_layout
2483
2484 \end_deeper
2485 \begin_layout Labeling
2486 \labelwidthstring 00000.00000.00000.000
2487 Arrays
2488 \begin_inset space ~
2489 \end_inset
2490
2491 are
2492 \begin_inset space ~
2493 \end_inset
2494
2495 also
2496 \begin_inset space ~
2497 \end_inset
2498
2499 instances
2500 \end_layout
2501
2502 \begin_deeper
2503 \begin_layout Standard
2504 Each array is itself an object.
2505 That is, when you write
2506 \family typewriter
2507 a[1..2] IS_A real
2508 \family default
2509 , three objects get created:
2510 \family typewriter
2511 a[1]
2512 \family default
2513 ,
2514 \family typewriter
2515 a[2]
2516 \family default
2517 , and
2518 \family typewriter
2519 a
2520 \family default
2521 .
2522 The object
2523 \family typewriter
2524 a
2525 \family default
2526 is an array instance which has parts named
2527 \family typewriter
2528 [1]
2529 \family default
2530 and
2531 \family typewriter
2532 [2]
2533 \family default
2534 that are real instances.
2535 When a parameterized model requires an array, you pass it the single item
2536
2537 \family typewriter
2538 a
2539 \family default
2540 , not the elements
2541 \family typewriter
2542 a[1..2]
2543 \family default
2544 .
2545 \end_layout
2546
2547 \end_deeper
2548 \begin_layout Labeling
2549 \labelwidthstring 00000.00000.00000.000
2550 No
2551 \begin_inset space ~
2552 \end_inset
2553
2554 contiguous
2555 \begin_inset space ~
2556 \end_inset
2557
2558 storage
2559 \begin_inset Index idx
2560 status collapsed
2561
2562 \begin_layout Plain Layout
2563 contiguous storage, no
2564 \end_layout
2565
2566 \end_inset
2567
2568
2569 \end_layout
2570
2571 \begin_deeper
2572 \begin_layout Standard
2573 Just in case you still have not caught on, ASCEND arrays are not blocks
2574 of memory such as are seen in low-level languages like C
2575 \begin_inset Index idx
2576 status collapsed
2577
2578 \begin_layout Plain Layout
2579 C, computer language
2580 \end_layout
2581
2582 \end_inset
2583
2584 , FORTRAN
2585 \begin_inset Index idx
2586 status collapsed
2587
2588 \begin_layout Plain Layout
2589 FORTRAN
2590 \end_layout
2591
2592 \end_inset
2593
2594 , and Matlab
2595 \begin_inset Index idx
2596 status collapsed
2597
2598 \begin_layout Plain Layout
2599 Matlab
2600 \end_layout
2601
2602 \end_inset
2603
2604 .
2605 The modeling language does not provide things like MatMult
2606 \begin_inset Index idx
2607 status collapsed
2608
2609 \begin_layout Plain Layout
2610 MatMult
2611 \end_layout
2612
2613 \end_inset
2614
2615 , Transpose
2616 \begin_inset Index idx
2617 status collapsed
2618
2619 \begin_layout Plain Layout
2620 Transpose
2621 \end_layout
2622
2623 \end_inset
2624
2625 , and Inverse
2626 \begin_inset Index idx
2627 status collapsed
2628
2629 \begin_layout Plain Layout
2630 Inverse
2631 \end_layout
2632
2633 \end_inset
2634
2635 because these are procedural solving tools.
2636 If you are dedicated, you could write METHODs that implement matrix algebra,
2637 but this is a really dumb idea.
2638 We aim to structure our software so that it can interact openly with separate,
2639 dedicated tools (such as Matlab) when those tools are needed.
2640 \end_layout
2641
2642 \end_deeper
2643 \begin_layout Labeling
2644 \labelwidthstring 00000.00000.00000.000
2645 Index
2646 \begin_inset space ~
2647 \end_inset
2648
2649 variable
2650 \begin_inset Index idx
2651 status collapsed
2652
2653 \begin_layout Plain Layout
2654 index variable
2655 \end_layout
2656
2657 \end_inset
2658
2659 One can introduce a variable as an index ranging over a set.
2660 Index variables are local to the statements in which they occur.
2661 An example of using an index variable is the following FOR statement:
2662 \end_layout
2663
2664 \begin_deeper
2665 \begin_layout LyX-Code
2666 FOR i IN components CREATE
2667 \end_layout
2668
2669 \begin_layout LyX-Code
2670 VLE_equil[i]: y[i] = K[i]*x[i];
2671 \end_layout
2672
2673 \begin_layout LyX-Code
2674 END FOR;
2675 \end_layout
2676
2677 \begin_layout Standard
2678 In this example i implicitly is of the same type as the values in the set
2679 components.
2680 If another object i exists in the model containing the FOR loop, it is
2681 ignored while executing the statements in that loop.
2682 This may cause unexpected results and the compiler will generate warnings
2683 about loop index shadowed variables.
2684 \end_layout
2685
2686 \end_deeper
2687 \begin_layout Labeling
2688 \labelwidthstring 00000.00000.00000.000
2689 Label
2690 \begin_inset Index idx
2691 status collapsed
2692
2693 \begin_layout Plain Layout
2694 label
2695 \end_layout
2696
2697 \end_inset
2698
2699 : One can label statements which define arithmetic relationships (objective
2700 functions, equalities, and inequalities) in ASCEND.
2701 Labeling is highly recommended because it makes models much more readable
2702 and more easily debugged.
2703 Labels are also necessary for relations which are going to be used in condition
2704 al modeling or differentiation functions.
2705 A label is a sequence of alphanumeric characters ending in a colon.
2706 An example of a labeled equation is:
2707 \end_layout
2708
2709 \begin_deeper
2710 \begin_layout LyX-Code
2711 mass_balance: m_in = m_out;
2712 \end_layout
2713
2714 \begin_layout Standard
2715 An example of a labeled objective function is:
2716 \end_layout
2717
2718 \begin_layout LyX-Code
2719 obj1: MAXIMIZE revenue - cost;
2720 \end_layout
2721
2722 \begin_layout Standard
2723 If a relation is defined within a FOR statement, it must have an array indexed
2724 label so that each instance created using the statement is distinguishable
2725 from the others.
2726 An example is:
2727 \end_layout
2728
2729 \begin_layout LyX-Code
2730 FOR i IN components CREATE
2731 \end_layout
2732
2733 \begin_layout LyX-Code
2734 equil[i]: y[i] = K[i]*x[i];
2735 \end_layout
2736
2737 \begin_layout LyX-Code
2738 END FOR;
2739 \end_layout
2740
2741 \begin_layout Standard
2742 The ASCEND interactive user interface identifies relationships by their
2743 labels.
2744 If one has not provided such a label, the system generates the label:
2745 \end_layout
2746
2747 \begin_layout LyX-Code
2748
2749 \emph on
2750 modelname_equationnumber
2751 \end_layout
2752
2753 \begin_layout Standard
2754 where modelname and equationnumber are the name of the model and the equation
2755 number in the model.
2756 An example is
2757 \end_layout
2758
2759 \begin_layout LyX-Code
2760 mixture_14
2761 \end_layout
2762
2763 \begin_layout Standard
2764 for the unlabeled 14th relation in the mixture definition.
2765 If there is a conflict caused with an existing name, the generated name
2766 has enough letters added after equationnumber to make it a unique name.
2767 Remember that each model in a refinement hierarchy inherits the equations
2768 of its less refined ancestors, so the first equation appearing in the source
2769 code of a refining model may actually be the nth relation in that model.
2770 \end_layout
2771
2772 \end_deeper
2773 \begin_layout Labeling
2774 \labelwidthstring 00000.00000.00000.000
2775
2776 \bar under
2777 Lists
2778 \bar default
2779
2780 \begin_inset Index idx
2781 status collapsed
2782
2783 \begin_layout Plain Layout
2784 lists
2785 \end_layout
2786
2787 \end_inset
2788
2789 Often in a statement one can include a list of names or expression.
2790 A name list is one or more names where multiple list entries are separated
2791 from each other by commas.
2792 Examples of a list of names are:
2793 \end_layout
2794
2795 \begin_deeper
2796 \begin_layout LyX-Code
2797 \align block
2798 T1, inlet_T, outlet_T
2799 \end_layout
2800
2801 \begin_layout LyX-Code
2802 \align block
2803 y[components], y_in
2804 \end_layout
2805
2806 \begin_layout LyX-Code
2807 \align block
2808 stage[1..n_stages]
2809 \end_layout
2810
2811 \end_deeper
2812 \begin_layout Labeling
2813 \labelwidthstring 00000.00000.00000.000
2814
2815 \bar under
2816 Ordered
2817 \begin_inset space ~
2818 \end_inset
2819
2820 lists
2821 \begin_inset Index idx
2822 status collapsed
2823
2824 \begin_layout Plain Layout
2825 lists, ordered
2826 \end_layout
2827
2828 \end_inset
2829
2830
2831 \begin_inset Index idx
2832 status collapsed
2833
2834 \begin_layout Plain Layout
2835 ordered lists
2836 \end_layout
2837
2838 \end_inset
2839
2840 :
2841 \bar default
2842 If the ordering of names in a list matters, that list is enclosed in ().
2843 Order matters in: calling externally defined methods or models, calling
2844 most real-valued functions, passing parameters to ASCEND models or methods,
2845 and declaring the controlling parameters that SELECT, SWITCH, and WHEN
2846 statements make decisions on.
2847 \end_layout
2848
2849 \begin_deeper
2850 \begin_layout Section
2851 Basic Concepts
2852 \end_layout
2853
2854 \end_deeper
2855 \begin_layout Labeling
2856 \labelwidthstring 00000.00000.00000.000
2857
2858 \bar under
2859 Instances
2860 \begin_inset Index idx
2861 status collapsed
2862
2863 \begin_layout Plain Layout
2864 instances
2865 \end_layout
2866
2867 \end_inset
2868
2869
2870 \begin_inset space ~
2871 \end_inset
2872
2873 and
2874 \begin_inset space ~
2875 \end_inset
2876
2877 types
2878 \bar default
2879
2880 \begin_inset Index idx
2881 status collapsed
2882
2883 \begin_layout Plain Layout
2884 types
2885 \end_layout
2886
2887 \end_inset
2888
2889 This is an opportune time to emphasize the distinction between the terms
2890 instance and type.
2891 A type in ASCEND is what we define when we declare an ASCEND model or atom.
2892 It is the formal definition of the attributes (parts) and attribute default
2893 values that an object will have if it is created using the type definition.
2894 Methods are associated with types.
2895 \end_layout
2896
2897 \begin_deeper
2898 \begin_layout Standard
2899 In ASCEND there are two meanings (closely related) of an instance.
2900
2901 \end_layout
2902
2903 \begin_layout Itemize
2904 An instance is a named part that exists within a type definition.
2905
2906 \end_layout
2907
2908 \begin_layout Itemize
2909 An instance is a compiled object.
2910
2911 \end_layout
2912
2913 \begin_layout Standard
2914 If one is in the context of the ASCEND interface, the system compiles an
2915 instance of a model type to create an object with which one carries out
2916 computations.
2917 The system requires the user to give a simple name for this simulation
2918 instance.
2919 This name given is then the first part of the qualified name for all the
2920 parts of the compiled object.
2921 \end_layout
2922
2923 \end_deeper
2924 \begin_layout Labeling
2925 \labelwidthstring 00000.00000.00000.000
2926
2927 \bar under
2928 Implicit
2929 \begin_inset space ~
2930 \end_inset
2931
2932 types
2933 \bar default
2934
2935 \begin_inset Index idx
2936 status collapsed
2937
2938 \begin_layout Plain Layout
2939 types, implicit
2940 \end_layout
2941
2942 \end_inset
2943
2944
2945 \begin_inset Index idx
2946 status collapsed
2947
2948 \begin_layout Plain Layout
2949 types, implicit
2950 \end_layout
2951
2952 \end_inset
2953
2954 It is possible to create an instance that does not have a corresponding
2955 type definition in the library.
2956 The type of such an instance is said to be
2957 \series bold
2958 implicit
2959 \series default
2960
2961 \begin_inset Foot
2962 status collapsed
2963
2964 \begin_layout Plain Layout
2965 (Some people use the word
2966 \emph on
2967 anonymous
2968 \emph default
2969
2970 \begin_inset Index idx
2971 status collapsed
2972
2973 \begin_layout Plain Layout
2974 type, anonymous
2975 \end_layout
2976
2977 \end_inset
2978
2979
2980 \begin_inset Index idx
2981 status collapsed
2982
2983 \begin_layout Plain Layout
2984 anonymous type
2985 \end_layout
2986
2987 \end_inset
2988
2989 .
2990 However, no computable type is anonymous and the implicit type of an instance
2991 is theoretically computable)
2992 \end_layout
2993
2994 \end_inset
2995
2996 .
2997 The simplest example of an implicit type is the type of an instance compiled
2998 from the built-in definition
2999 \family sans
3000 integer_constant
3001 \family default
3002 .
3003 For example:
3004 \end_layout
3005
3006 \begin_deeper
3007 \begin_layout LyX-Code
3008 i, j IS_A integer_constant;
3009 \end_layout
3010
3011 \begin_layout LyX-Code
3012 i:== 2;
3013 \end_layout
3014
3015 \begin_layout LyX-Code
3016 j:== 3;
3017 \end_layout
3018
3019 \begin_layout Standard
3020 Instances
3021 \family typewriter
3022 i
3023 \family default
3024 and
3025 \family typewriter
3026 j
3027 \family default
3028 , though of the same formal type, are implicit type incompatible because
3029 they have been assigned distinct values.
3030 \end_layout
3031
3032 \begin_layout Standard
3033 Instances which are either formally or implicitly type incompatible cannot
3034 be merged.
3035 This will be discussed further in Section
3036 \begin_inset CommandInset ref
3037 LatexCommand vref
3038 reference "sec:x.3Declarative-statements"
3039
3040 \end_inset
3041
3042 .
3043 \end_layout
3044
3045 \end_deeper
3046 \begin_layout Labeling
3047 \labelwidthstring 00000.00000.00000.000
3048 Parsing
3049 \begin_inset Index idx
3050 status collapsed
3051
3052 \begin_layout Plain Layout
3053 parsing
3054 \end_layout
3055
3056 \end_inset
3057
3058 Most errors in the declaration of an ASCEND model can be caught at parse
3059 time because the object type of any well-formed name in an ASCEND definition
3060 can be resolved or proved ambiguous.
3061 We cannot prove at parse time whether a specific array element will exist,
3062 but we can know that should such an element exist, it must be of the type
3063 with which the array is defined.
3064
3065 \end_layout
3066
3067 \begin_deeper
3068 \begin_layout Standard
3069 Ambiguity is warned about loudly because it is caused by either misspelling
3070 or poor modeling style.
3071 The simplest example of ambiguity follows.
3072 \end_layout
3073
3074 \begin_layout Standard
3075 Assume a type, stream, and a refinement of stream, heat_stream, which adds
3076 the new variable
3077 \family typewriter
3078 H
3079 \family default
3080 .
3081 Now, if we write:
3082 \end_layout
3083
3084 \begin_layout LyX-Code
3085 MODEL mixer;
3086 \end_layout
3087
3088 \begin_layout LyX-Code
3089 input[1..2] IS_A stream;
3090 \end_layout
3091
3092 \begin_layout LyX-Code
3093 output IS_A heat_stream;
3094 \end_layout
3095
3096 \begin_layout LyX-Code
3097 input[1].H + input[2].H = output.H;
3098 \end_layout
3099
3100 \begin_layout LyX-Code
3101 END mixer;
3102 \end_layout
3103
3104 \begin_layout Standard
3105 We see the parser can find the definition of H in the type heat_stream,
3106 so
3107 \family typewriter
3108 output.H
3109 \family default
3110 is well defined.
3111 The author of the mixer model may intend to refine
3112 \family typewriter
3113 input[1]
3114 \family default
3115 and
3116 \family typewriter
3117 input[2]
3118 \family default
3119 to be objects of different types, say steam_stream and electric_stream,
3120 where each defines an
3121 \family typewriter
3122 H
3123 \family default
3124 suitable for use in the equation.
3125 The parser cannot read the authors mind, so it warns that
3126 \family typewriter
3127 input[1].H
3128 \family default
3129 and
3130 \family typewriter
3131 input[2].H
3132 \family default
3133 are ambiguous in the mixer definition.
3134 The mixer model is not highly reusable except by the author, but sometimes
3135 reusability is not a high priority objective.
3136 The mixer definition is allowed, but it may cause problems in instantiation
3137 if the author has forgotten the assumption that is not explicitly stated
3138 in the model and neglects to refine the input streams appropriately.
3139 \end_layout
3140
3141 \end_deeper
3142 \begin_layout Labeling
3143 \labelwidthstring 00000.00000.00000.000
3144
3145 \bar under
3146 Instantiation
3147 \bar default
3148
3149 \begin_inset Index idx
3150 status collapsed
3151
3152 \begin_layout Plain Layout
3153 instantiation
3154 \end_layout
3155
3156 \end_inset
3157
3158 Creating an simulation based on a type definition is a multi-phase
3159 \begin_inset Index idx
3160 status collapsed
3161
3162 \begin_layout Plain Layout
3163 multi-phase
3164 \end_layout
3165
3166 \end_inset
3167
3168 process called compiling
3169 \begin_inset Index idx
3170 status collapsed
3171
3172 \begin_layout Plain Layout
3173 compiling
3174 \end_layout
3175
3176 \end_inset
3177
3178 (or instantiation).
3179 When an instantiation cannot be completed because some structural parameter
3180 (a symbol_constant, real_constant, boolean_constant, integer_constant,
3181 or set) does not have a value there will be PENDING
3182 \begin_inset Index idx
3183 status collapsed
3184
3185 \begin_layout Plain Layout
3186 PENDING
3187 \end_layout
3188
3189 \end_inset
3190
3191 statements.
3192 The user interface will warn that something is incomplete.
3193 \end_layout
3194
3195 \begin_deeper
3196 \begin_layout Standard
3197 In phase
3198 \begin_inset Index idx
3199 status collapsed
3200
3201 \begin_layout Plain Layout
3202 phases, compiler
3203 \end_layout
3204
3205 \end_inset
3206
3207 1 all statements that create instance structures or assign constant values
3208 are executed.
3209 This phase theoretically requires an infinite number of passes through
3210 the structural statements of a definition.
3211 We allow a maximum of 5 and have never needed more than 3.
3212 There may be pending statements at the end of phase 1.
3213 The compiler or interface will issue warnings about pending statements,
3214 starting with warnings about unassigned constants.
3215 \end_layout
3216
3217 \begin_layout Standard
3218 Phase 2 compiles as many real arithmetic relation definitions as possible.
3219 Some relations may be impossible to compile because the constants or sets
3220 they depend on do not have values assigned.
3221 Other relations may be impossible because they reference variables that
3222 do not exist.
3223 This is determined in a single pass.
3224 \end_layout
3225
3226 \begin_layout Standard
3227 Phase 3 compiles as many logical arithmetic relation definitions as possible.
3228 Some relations may be impossible to compile because the constants or sets
3229 they depend on do not have values assigned.
3230 Other relations may be impossible because they reference real arithmetic
3231 relations that do not exist.
3232 This is determined in a single pass.
3233 \end_layout
3234
3235 \begin_layout Standard
3236 Phase 4 compiles as many conditional programming statements (
3237 \family sans
3238 WHEN
3239 \family default
3240 s) as possible.
3241 Some
3242 \family sans
3243 WHEN
3244 \family default
3245 relations may be impossible to compile because the discrete variables,
3246 models, or relations they depend on do not exist.
3247 This is determined in a single pass.
3248 \end_layout
3249
3250 \begin_layout Standard
3251 Phase 5 executes the variable defaulting statements made in the declarative
3252 section of each model
3253 \emph on
3254 if and only if
3255 \emph default
3256 there are no pending statements from phases 1-4 anywhere in the simulation.
3257 \end_layout
3258
3259 \end_deeper
3260 \begin_layout Labeling
3261 \labelwidthstring 00000.00000.00000.000
3262 default_self
3263 \begin_inset Index idx
3264 status collapsed
3265
3266 \begin_layout Plain Layout
3267 default
3268 \begin_inset ERT
3269 status collapsed
3270
3271 \begin_layout Plain Layout
3272
3273
3274 \backslash
3275 _
3276 \end_layout
3277
3278 \end_inset
3279
3280 self
3281 \end_layout
3282
3283 \end_inset
3284
3285 After all phases are done, the method default_self is called in the top-most
3286 model of the simulation, if this method exists.
3287 \end_layout
3288
3289 \begin_deeper
3290 \begin_layout Standard
3291 The first occurrence of each impossible statement will be explained during
3292 a failed compilation.
3293 Impossible statements include:
3294 \end_layout
3295
3296 \begin_layout Itemize
3297 Relations containing undefinable variables (often misspellings).
3298 \end_layout
3299
3300 \begin_layout Itemize
3301 Assignments that are dimensionally inconsistent or containing mismatched
3302 types.
3303 \end_layout
3304
3305 \begin_layout Itemize
3306 Structure building or modifying statements that refer to model parts which
3307 cannot exist or that require a type-incompatible argument, refinement,
3308 or merge.
3309 \end_layout
3310
3311 \begin_layout Chapter
3312 Data Type Declarations
3313 \begin_inset Index idx
3314 status collapsed
3315
3316 \begin_layout Plain Layout
3317 data type declarations
3318 \end_layout
3319
3320 \end_inset
3321
3322
3323 \end_layout
3324
3325 \begin_layout Standard
3326 In the spectrum of OO languages, ASCEND is best considered as being class-based
3327 \begin_inset Index idx
3328 status collapsed
3329
3330 \begin_layout Plain Layout
3331 class-based
3332 \end_layout
3333
3334 \end_inset
3335
3336 , though it is rather more a hybrid.
3337 We have atom and model definitions, called
3338 \series bold
3339 types
3340 \series default
3341 , and the compiled objects themselves, called
3342 \series bold
3343 instances
3344 \series default
3345 .
3346 ASCEND instances have a record of what type they were constructed from.
3347 \end_layout
3348
3349 \end_deeper
3350 \begin_layout Labeling
3351 \labelwidthstring 00000.00000.00000.000
3352
3353 \bar under
3354 Type
3355 \begin_inset space ~
3356 \end_inset
3357
3358 qualifiers
3359 \begin_inset Index idx
3360 status collapsed
3361
3362 \begin_layout Plain Layout
3363 type qualifiers
3364 \end_layout
3365
3366 \end_inset
3367
3368 :
3369 \end_layout
3370
3371 \begin_layout Labeling
3372 \labelwidthstring 00000.00000.00000.000
3373
3374 \family sans
3375 UNIVERSAL
3376 \family default
3377
3378 \begin_inset Index idx
3379 status collapsed
3380
3381 \begin_layout Plain Layout
3382 UNIVERSAL
3383 \end_layout
3384
3385 \end_inset
3386
3387 Universal is an optional modifier of all
3388 \family sans
3389 ATOM
3390 \family default
3391 ,
3392 \family sans
3393 CONSTANT
3394 \family default
3395 and
3396 \family sans
3397 MODEL
3398 \family default
3399 definitions.
3400 If
3401 \family sans
3402 UNIVERSAL
3403 \family default
3404 precedes the definition, then
3405 \emph on
3406 all
3407 \emph default
3408 instances of that type will actually refer to the first instance of the
3409 type that is created.
3410 This saves memory and ensures global consistency of data.
3411
3412 \end_layout
3413
3414 \begin_deeper
3415 \begin_layout Standard
3416 Examples of universal type definitions are
3417 \end_layout
3418
3419 \begin_layout LyX-Code
3420 UNIVERSAL MODEL methane
3421 \end_layout
3422
3423 \begin_layout LyX-Code
3424 REFINES generic_component_model;
3425 \end_layout
3426
3427 \begin_layout LyX-Code
3428 UNIVERSAL CONSTANT circle_constant
3429 \end_layout
3430
3431 \begin_layout LyX-Code
3432 REFINES real_constant :== 1{PI};
3433 \end_layout
3434
3435 \begin_layout LyX-Code
3436 UNIVERSAL ATOM counter_1
3437 \end_layout
3438
3439 \begin_layout LyX-Code
3440 REFINES integer;
3441 \end_layout
3442
3443 \end_deeper
3444 \begin_layout Labeling
3445 \labelwidthstring 00000.00000.00000.000
3446 Tip:
3447 \begin_inset space ~
3448 \end_inset
3449
3450 Do
3451 \begin_inset space ~
3452 \end_inset
3453
3454 not
3455 \begin_inset space ~
3456 \end_inset
3457
3458 use
3459 \begin_inset space ~
3460 \end_inset
3461
3462
3463 \family sans
3464 UNIVERSAL
3465 \family default
3466
3467 \begin_inset space ~
3468 \end_inset
3469
3470 variables
3471 \begin_inset space ~
3472 \end_inset
3473
3474 in
3475 \begin_inset space ~
3476 \end_inset
3477
3478 relations.
3479 \end_layout
3480
3481 \begin_deeper
3482 \begin_layout Standard
3483 It is important to note that, because
3484 \emph on
3485 variables
3486 \emph default
3487 must store information about which relations they occur in, it is a very
3488 bad idea to use
3489 \family sans
3490 UNIVERSAL
3491 \family default
3492 typed variables in relations.
3493 The construction and maintenance of the relation list becomes very expensive
3494 for universal variables.
3495
3496 \family sans
3497 UNIVERSAL
3498 \family default
3499
3500 \emph on
3501 constants
3502 \emph default
3503 are fine to use, though, because there are no relation links for constants.
3504 \end_layout
3505
3506 \begin_layout Section
3507 Models
3508 \end_layout
3509
3510 \end_deeper
3511 \begin_layout Labeling
3512 \labelwidthstring 00000.00000.00000.000
3513
3514 \family sans
3515 MODEL
3516 \family default
3517
3518 \begin_inset Index idx
3519 status collapsed
3520
3521 \begin_layout Plain Layout
3522 MODEL
3523 \end_layout
3524
3525 \end_inset
3526
3527 An ASCEND model has a declarative part and an optional procedural part
3528 headed by the METHODS word.
3529 Models are essentially containers for variables and relations.
3530 We will explain the various statements that can be made within models in
3531 Section
3532 \begin_inset CommandInset ref
3533 LatexCommand vref
3534 reference "sec:x.3Declarative-statements"
3535
3536 \end_inset
3537
3538 and Section
3539 \begin_inset CommandInset ref
3540 LatexCommand vref
3541 reference "sec:x.4Procedural-statements"
3542
3543 \end_inset
3544
3545 .
3546 \end_layout
3547
3548 \begin_layout Standard
3549 Simple
3550 \begin_inset space ~
3551 \end_inset
3552
3553 models
3554 \begin_inset Index idx
3555 status collapsed
3556
3557 \begin_layout Plain Layout
3558 models, simple
3559 \end_layout
3560
3561 \end_inset
3562
3563 :
3564 \end_layout
3565
3566 \begin_layout Labeling
3567 \labelwidthstring 00000.00000.00000.000
3568 foo
3569 \family typewriter
3570
3571 \begin_inset space ~
3572 \end_inset
3573
3574
3575 \begin_inset space ~
3576 \end_inset
3577
3578
3579 \begin_inset space ~
3580 \end_inset
3581
3582
3583 \begin_inset space ~
3584 \end_inset
3585
3586 MODEL foo;
3587 \end_layout
3588
3589 \begin_deeper
3590 \begin_layout LyX-Code
3591 (* statements about foo go here*)
3592 \end_layout
3593
3594 \begin_layout LyX-Code
3595 METHODS
3596 \end_layout
3597
3598 \begin_layout LyX-Code
3599 (* METHODs for foo go here*)
3600 \end_layout
3601
3602 \begin_layout LyX-Code
3603 END foo;
3604 \end_layout
3605
3606 \end_deeper
3607 \begin_layout Labeling
3608 \labelwidthstring 00000.00000.00000.000
3609 bar
3610 \family typewriter
3611
3612 \begin_inset space ~
3613 \end_inset
3614
3615
3616 \begin_inset space ~
3617 \end_inset
3618
3619
3620 \begin_inset space ~
3621 \end_inset
3622
3623
3624 \begin_inset space ~
3625 \end_inset
3626
3627 MODEL bar REFINES foo;
3628 \end_layout
3629
3630 \begin_deeper
3631 \begin_layout LyX-Code
3632 (*additional statements about foo *)
3633 \end_layout
3634
3635 \begin_layout LyX-Code
3636 METHODS
3637 \end_layout
3638
3639 \begin_layout LyX-Code
3640 (* additional METHODs for bar *)
3641 \end_layout
3642
3643 \begin_layout LyX-Code
3644 END bar;
3645 \end_layout
3646
3647 \end_deeper
3648 \begin_layout Labeling
3649 \labelwidthstring 00000.00000.00000.000
3650
3651 \bar under
3652 Parameterized
3653 \begin_inset space ~
3654 \end_inset
3655
3656 Models
3657 \bar default
3658
3659 \begin_inset Index idx
3660 status collapsed
3661
3662 \begin_layout Plain Layout
3663 models, parameterized
3664 \end_layout
3665
3666 \end_inset
3667
3668 Parameterizing models makes them easier to understand and faster for the
3669 system to compile.
3670 The syntax for a parameterized model vaguely resembles a function call
3671 in imperative languages, but it is NOT.
3672 When constructing a reusable model, all the constants that determine the
3673 sizes of arrays and other structures should be declared in the parameter
3674 list so that
3675 \end_layout
3676
3677 \begin_deeper
3678 \begin_layout Itemize
3679 the user knows what is required to reuse the model.
3680 \end_layout
3681
3682 \begin_layout Itemize
3683 the compiler knows what values must be set before it should bother attempting
3684 to compile the model.
3685 \end_layout
3686
3687 \begin_layout Standard
3688 There is no reason that other items could not also go in the parameter list,
3689 such as key variables which might be considered inputs or outputs or control
3690 parameters in the mathematical application of the model.
3691 A simple example of parameterization would be:
3692 \end_layout
3693
3694 \end_deeper
3695 \begin_layout Labeling
3696 \labelwidthstring 00000.00000.00000.000
3697 column(n,s)
3698 \end_layout
3699
3700 \begin_deeper
3701 \begin_layout LyX-Code
3702 MODEL column(
3703 \end_layout
3704
3705 \begin_layout LyX-Code
3706 ntrays WILL_BE integer_constant;
3707 \end_layout
3708
3709 \begin_layout LyX-Code
3710 components IS_A set of symbol_constant;
3711 \end_layout
3712
3713 \begin_layout LyX-Code
3714 );
3715 \end_layout
3716
3717 \begin_layout LyX-Code
3718 stage[1..ntrays] IS_A simple_tray;
3719 \end_layout
3720
3721 \begin_layout LyX-Code
3722 END column;
3723 \end_layout
3724
3725 \end_deeper
3726 \begin_layout Labeling
3727 \labelwidthstring 00000.00000.00000.000
3728 flowsheet
3729 \end_layout
3730
3731 \begin_deeper
3732 \begin_layout LyX-Code
3733 MODEL flowsheet;
3734 \end_layout
3735
3736 \begin_layout LyX-Code
3737 tower4size IS_A integer_constant;
3738 \end_layout
3739
3740 \begin_layout LyX-Code
3741 tower4size :== 22;
3742 \end_layout
3743
3744 \begin_layout LyX-Code
3745 ct IS_A column(tower4size,[c5,c6]);
3746 \end_layout
3747
3748 \begin_layout LyX-Code
3749 (* additional flowsheet statements *)
3750 \end_layout
3751
3752 \begin_layout LyX-Code
3753 END flowsheet;
3754 \end_layout
3755
3756 \begin_layout Standard
3757 In this example, the column model takes the first argument, ntrays, by reference.
3758 That is,
3759 \family typewriter
3760 ct.ntrays
3761 \family default
3762 is an alias for the flowsheet instance
3763 \family typewriter
3764 tower4size
3765 \family default
3766 .
3767
3768 \family typewriter
3769 tower4size
3770 \family default
3771 must be compiled and assigned a value before we will attempt to compile
3772 the column model instance
3773 \family typewriter
3774 ct
3775 \family default
3776 .
3777 The second argument is taken by value,
3778 \family typewriter
3779 [c5,c6]
3780 \family default
3781 , and assigned to components, a column part that was declared with
3782 \family sans
3783 IS_A
3784 \family default
3785 in the parameter list.
3786 There is only one name for this set,
3787 \family typewriter
3788 ct.components
3789 \family default
3790 .
3791 Note that in the
3792 \family typewriter
3793 flowsheet
3794 \family default
3795 model there is no part that is a set of
3796 \family sans
3797 symbol_constant
3798 \family default
3799 .
3800
3801 \end_layout
3802
3803 \begin_layout Standard
3804 The use of parameters in ASCEND modeling requires some thought, and we will
3805 present that set of thoughts in Section
3806 \begin_inset CommandInset ref
3807 LatexCommand vref
3808 reference "sec:x.5Parameterized-models"
3809
3810 \end_inset
3811
3812 .
3813 Beginners may wish to create new models without parameters until they are
3814 comfortable using the existing parameterized library definitions.
3815 Parameters are intended to support model reuse and efficient compilation
3816 which are not issues in the very earliest phase of developing novel models.
3817 \end_layout
3818
3819 \begin_layout Section
3820 Sets
3821 \begin_inset Index idx
3822 status collapsed
3823
3824 \begin_layout Plain Layout
3825 sets
3826 \end_layout
3827
3828 \end_inset
3829
3830
3831 \begin_inset CommandInset label
3832 LatexCommand label
3833 name "sub:x.2.2Sets"
3834
3835 \end_inset
3836
3837
3838 \end_layout
3839
3840 \begin_layout Standard
3841 Arrays in ASCEND, as already discussed in Section
3842 \begin_inset CommandInset ref
3843 LatexCommand vref
3844 reference "sub:x.1.2Basic-Elements"
3845
3846 \end_inset
3847
3848 , are defined over sets.
3849 A set is simply an instance with a set value.
3850 The elements of sets are
3851 \emph on
3852 not
3853 \emph default
3854 instances or sets.
3855 \end_layout
3856
3857 \end_deeper
3858 \begin_layout Labeling
3859 \labelwidthstring 00000.00000.00000.000
3860
3861 \bar under
3862 Set
3863 \begin_inset space ~
3864 \end_inset
3865
3866 Declaration:
3867 \bar default
3868 A set is made of either symbol_constants or integer_constants, so a set
3869 object is declared in one of two ways:
3870 \end_layout
3871
3872 \begin_deeper
3873 \begin_layout LyX-Code
3874 my_integer_set IS_A set OF integer_constant;
3875 \end_layout
3876
3877 \begin_layout Standard
3878 or
3879 \end_layout
3880
3881 \begin_layout LyX-Code
3882 my_symbol_set IS_A set OF symbol_constant;
3883 \end_layout
3884
3885 \end_deeper
3886 \begin_layout Labeling
3887 \labelwidthstring 00000.00000.00000.000
3888
3889 \family typewriter
3890 :==
3891 \family default
3892
3893 \begin_inset Index idx
3894 status collapsed
3895
3896 \begin_layout Plain Layout
3897 :==
3898 \end_layout
3899
3900 \end_inset
3901
3902 A set is assigned a value like so:
3903 \end_layout
3904
3905 \begin_deeper
3906 \begin_layout LyX-Code
3907 my_integer_set :== [1,4];
3908 \end_layout
3909
3910 \begin_layout Standard
3911 The RHS of such an assignment must be either the name of another set instance
3912 or an expression enclosed in square brackets and made up of only set operators,
3913 other sets, and the names of integer_constants or symbol_constants.
3914 Sets can only be assigned once.
3915 \end_layout
3916
3917 \end_deeper
3918 \begin_layout Labeling
3919 \labelwidthstring 00000.00000.00000.000
3920
3921 \bar under
3922 Set
3923 \begin_inset space ~
3924 \end_inset
3925
3926 Operations
3927 \bar default
3928
3929 \family sans
3930 UNION
3931 \family default
3932
3933 \begin_inset Index idx
3934 status collapsed
3935
3936 \begin_layout Plain Layout
3937 UNION
3938 \end_layout
3939
3940 \end_inset
3941
3942
3943 \family typewriter
3944 [setlist]
3945 \end_layout
3946
3947 \begin_deeper
3948 \begin_layout Standard
3949 A function taken over a list of sets.
3950 The result is the set that includes all the members of all the sets in
3951 the list.
3952 Note that the result of the
3953 \family sans
3954 UNION
3955 \family default
3956 operation is an unordered set and the argument order to the union function
3957 does not matter.
3958 The syntax is:
3959 \end_layout
3960
3961 \end_deeper
3962 \begin_layout Labeling
3963 \labelwidthstring 00000.00000.00000.000
3964 +
3965 \begin_inset Index idx
3966 status collapsed
3967
3968 \begin_layout Plain Layout
3969 +, sets
3970 \end_layout
3971
3972 \end_inset
3973
3974
3975 \family typewriter
3976 UNION[list_of_sets]
3977 \end_layout
3978
3979 \begin_layout Labeling
3980 \labelwidthstring 00000.00000.00000.000
3981
3982 \family typewriter
3983 A+B
3984 \family default
3985
3986 \begin_inset space ~
3987 \end_inset
3988
3989 is
3990 \begin_inset space ~
3991 \end_inset
3992
3993 shorthand
3994 \begin_inset space ~
3995 \end_inset
3996
3997 for
3998 \family typewriter
3999 UNION[A,B]
4000 \end_layout
4001
4002 \begin_deeper
4003 \begin_layout Standard
4004 Consider the following sets for the examples to follow.
4005 \end_layout
4006
4007 \begin_layout LyX-Code
4008 A := [1, 2, 3, 5, 9];
4009 \end_layout
4010
4011 \begin_layout LyX-Code
4012 B := [2, 4, 6, 8];
4013 \end_layout
4014
4015 \begin_layout Standard
4016 Then
4017 \family typewriter
4018 UNION[A, B]
4019 \family default
4020 is equal to the set
4021 \family typewriter
4022 [1, 2, 3, 4, 5, 6, 8, 9]
4023 \family default
4024 which equals
4025 \family typewriter
4026 [1..6, 8, 9]
4027 \family default
4028 which equals
4029 \family typewriter
4030 [[1..9] - [7]]
4031 \family default
4032 .
4033 \end_layout
4034
4035 \end_deeper
4036 \begin_layout Labeling
4037 \labelwidthstring 00000.00000.00000.000
4038
4039 \family sans
4040 INTERSECTION
4041 \family default
4042
4043 \begin_inset Index idx
4044 status collapsed
4045
4046 \begin_layout Plain Layout
4047 INTERSECTION
4048 \end_layout
4049
4050 \end_inset
4051
4052 [] INTERSECTION[list of set expressions].
4053 Finds the intersection (and) of the sets listed.
4054
4055 \end_layout
4056
4057 \begin_layout Labeling
4058 \labelwidthstring 00000.00000.00000.000
4059 *
4060 \begin_inset Index idx
4061 status collapsed
4062
4063 \begin_layout Plain Layout
4064 *, sets
4065 \end_layout
4066
4067 \end_inset
4068
4069 Equivalent to
4070 \family sans
4071 INTERSECTION
4072 \family typewriter
4073 [list_of_sets]
4074 \family default
4075 .
4076 \end_layout
4077
4078 \begin_layout Labeling
4079 \labelwidthstring 00000.00000.00000.000
4080
4081 \family typewriter
4082 A*B
4083 \family default
4084
4085 \begin_inset space ~
4086 \end_inset
4087
4088 is
4089 \begin_inset space ~
4090 \end_inset
4091
4092 shorthand
4093 \begin_inset space ~
4094 \end_inset
4095
4096 for
4097 \begin_inset space ~
4098 \end_inset
4099
4100 I
4101 \family typewriter
4102 NTERSECTION[A,B]
4103 \end_layout
4104
4105 \begin_deeper
4106 \begin_layout Standard
4107 For the sets A and B defined just above,
4108 \family typewriter
4109 INTERSECTION[A, B]
4110 \family default
4111 is the set
4112 \family typewriter
4113 [2]
4114 \family default
4115 .
4116 The
4117 \family typewriter
4118 *
4119 \family default
4120 shorthand for intersection is
4121 \emph on
4122 not
4123 \emph default
4124 recommended for use except in libraries no one will look at.
4125 \end_layout
4126
4127 \end_deeper
4128 \begin_layout Labeling
4129 \labelwidthstring 00000.00000.00000.000
4130 Set
4131 \begin_inset space ~
4132 \end_inset
4133
4134 difference
4135 \begin_inset Index idx
4136 status collapsed
4137
4138 \begin_layout Plain Layout
4139 set difference
4140 \end_layout
4141
4142 \end_inset
4143
4144 : One can subtract one set from another.
4145 The result is the first set less any members in the set union of the first
4146 and second set.
4147 The syntax is
4148 \end_layout
4149
4150 \begin_deeper
4151 \begin_layout LyX-Code
4152
4153 \family typewriter
4154 first_set
4155 \family default
4156 -
4157 \begin_inset Index idx
4158 status collapsed
4159
4160 \begin_layout Plain Layout
4161 -, sets
4162 \end_layout
4163
4164 \end_inset
4165
4166
4167 \family typewriter
4168 second_set
4169 \end_layout
4170
4171 \begin_layout Standard
4172 For the sets
4173 \family typewriter
4174 A
4175 \family default
4176 and
4177 \family typewriter
4178 B
4179 \family default
4180 defined above, the set difference
4181 \family typewriter
4182 A - B
4183 \family default
4184 is the set
4185 \family typewriter
4186 [1, 3, 5, 9]
4187 \family default
4188 while the set difference
4189 \family typewriter
4190 B - A
4191 \family default
4192 is the set
4193 \family typewriter
4194 [4, 6, 8]
4195 \family default
4196 .
4197 \end_layout
4198
4199 \end_deeper
4200 \begin_layout Labeling
4201 \labelwidthstring 00000.00000.00000.000
4202
4203 \family sans
4204 CARD
4205 \family default
4206
4207 \begin_inset Index idx
4208 status collapsed
4209
4210 \begin_layout Plain Layout
4211 CARD
4212 \end_layout
4213
4214 \end_inset
4215
4216 [set] Cardinality
4217 \begin_inset Index idx
4218 status collapsed
4219
4220 \begin_layout Plain Layout
4221 cardinality
4222 \end_layout
4223
4224 \end_inset
4225
4226 .
4227 Returns an integer constant value that is the number of items in the set.
4228 \end_layout
4229
4230 \begin_layout Labeling
4231 \labelwidthstring 00000.00000.00000.000
4232
4233 \family sans
4234 CHOICE
4235 \family default
4236
4237 \begin_inset Index idx
4238 status collapsed
4239
4240 \begin_layout Plain Layout
4241 CHOICE
4242 \end_layout
4243
4244 \end_inset
4245
4246 [set] Choose one.
4247 The result of running the
4248 \family sans
4249 CHOICE
4250 \family default
4251 function over a set is an arbitrary (but consistent: for any set instance
4252 you always get the same result) single element of that set.
4253
4254 \end_layout
4255
4256 \begin_deeper
4257 \begin_layout Standard
4258 Running
4259 \family typewriter
4260 CHOICE[A]
4261 \family default
4262 gives any member from the set A.
4263 The result is a member, not a set.
4264 To make the result into a set, it must be enclosed in square brackets.
4265 Thus
4266 \family typewriter
4267 [CHOICE[A]]
4268 \family default
4269 is a set with a single element arbitrarily chosen from the set A.
4270 Good modelers do not leave modeling decisions to the compiler; they do
4271 not use
4272 \family sans
4273 CHOICE
4274 \family default
4275 .
4276 We are stuck with it for historical reasons.
4277 \end_layout
4278
4279 \begin_layout Standard
4280 To reduce a set by one element, one can use the following
4281 \end_layout
4282
4283 \begin_layout LyX-Code
4284 A_less_one IS_A set OF integer;
4285 \end_layout
4286
4287 \begin_layout LyX-Code
4288 A_less_one :== A - [CHOICE[A]];
4289 \end_layout
4290
4291 \end_deeper
4292 \begin_layout Labeling
4293 \labelwidthstring 00000.00000.00000.000
4294
4295 \family sans
4296 IN
4297 \family default
4298
4299 \begin_inset Index idx
4300 status collapsed
4301
4302 \begin_layout Plain Layout
4303 IN
4304 \end_layout
4305
4306 \end_inset
4307
4308
4309 \family typewriter
4310 lhs IN rhs
4311 \family default
4312 can only be well explained by examples.
4313
4314 \family sans
4315 IN
4316 \family default
4317 is used in index expressions.
4318 If
4319 \family typewriter
4320 lhs
4321 \family default
4322 is a simple and not previously defined name, it is created as a temporary
4323 loop index which will take on the values of the rhs set definition.
4324 If lhs is something that already exists, the result of
4325 \family typewriter
4326 lhs IN rhs
4327 \family default
4328 is a boolean value; stare at the model
4329 \family typewriter
4330 set_example
4331 \family default
4332 below which demonstrates both
4333 \family sans
4334 IN
4335 \family default
4336 and
4337 \family sans
4338 SUCH_THAT
4339 \family default
4340 .
4341 If you still are not satisfied, you might examine [[westerbergksets]]
4342 \begin_inset Note Note
4343 status open
4344
4345 \begin_layout Plain Layout
4346 fix this reference
4347 \end_layout
4348
4349 \end_inset
4350
4351 .
4352 \end_layout
4353
4354 \begin_layout Labeling
4355 \labelwidthstring 00000.00000.00000.000
4356
4357 \family sans
4358 SUCH_THAT
4359 \family default
4360
4361 \begin_inset Index idx
4362 status collapsed
4363
4364 \begin_layout Plain Layout
4365 SUCH
4366 \begin_inset ERT
4367 status collapsed
4368
4369 \begin_layout Plain Layout
4370
4371
4372 \backslash
4373 _
4374 \end_layout
4375
4376 \end_inset
4377
4378 THAT
4379 \end_layout
4380
4381 \end_inset
4382
4383 Set expressions can be rather clever.
4384 We will give a detailed example from chemistry because unordered sets are
4385 unfamiliar to most people and set arithmetic is quite powerful.
4386 In this example we see arrays of sets and sparse arrays.
4387
4388 \end_layout
4389
4390 \begin_layout LyX-Code
4391 MODEL set_example;
4392 \end_layout
4393
4394 \begin_layout LyX-Code
4395 (* we define a sparse matrix of reaction
4396 \end_layout
4397
4398 \begin_layout LyX-Code
4399 coefficient information and the species
4400 \end_layout
4401
4402 \begin_layout LyX-Code
4403 balance equations.
4404 *)
4405 \end_layout
4406
4407 \begin_layout LyX-Code
4408 rxns IS_A set OF integer_constant;
4409 \end_layout
4410
4411 \begin_layout LyX-Code
4412 rxns :== [1..3];
4413 \end_layout
4414
4415 \begin_layout LyX-Code
4416 species IS_A set OF symbol_constant;
4417 \end_layout
4418
4419 \begin_layout LyX-Code
4420 species :== ['A','B','C','D'];
4421 \end_layout
4422
4423 \begin_layout LyX-Code
4424 reactants[rxns] IS_A set OF symbol_constant; (* species
4425 \end_layout
4426
4427 \begin_layout LyX-Code
4428 in each rxn_j *)
4429 \end_layout
4430
4431 \begin_layout LyX-Code
4432 reactants[1] :== ['A','B','C'];
4433 \end_layout
4434
4435 \begin_layout LyX-Code
4436 reactants[2] :== ['A','C'];
4437 \end_layout
4438
4439 \begin_layout LyX-Code
4440 reactants[3] :== ['A','B','D'];
4441 \end_layout
4442
4443 \begin_layout LyX-Code
4444 reactions[species] IS_A set OF integer_constant;
4445 \end_layout
4446
4447 \begin_layout LyX-Code
4448 FOR i IN species CREATE (* rxns for each species i *)
4449 \end_layout
4450
4451 \begin_layout LyX-Code
4452 reactions[i] :== [j IN rxns SUCH_THAT i IN reactants[j]];
4453 \end_layout
4454
4455 \begin_layout LyX-Code
4456 END FOR;
4457 \end_layout
4458
4459 \begin_layout LyX-Code
4460 (* Define sparse stoichiometric matrix.
4461 Values of eta_ij
4462 \end_layout
4463
4464 \begin_layout LyX-Code
4465 set later.*)
4466 \end_layout
4467
4468 \begin_layout LyX-Code
4469 FOR j IN rxns CREATE
4470 \end_layout
4471
4472 \begin_layout LyX-Code
4473 FOR i IN reactants[j] CREATE
4474 \end_layout
4475
4476 \begin_layout LyX-Code
4477 (* eta_ij --> mole i/mole rxn j*)
4478 \end_layout
4479
4480 \begin_layout LyX-Code
4481 eta[i][j] IS_A real_constant;
4482 \end_layout
4483
4484 \begin_layout LyX-Code
4485 END FOR;
4486 \end_layout
4487
4488 \begin_layout LyX-Code
4489 END FOR;
4490 \end_layout
4491
4492 \begin_layout LyX-Code
4493 production[species] IS_A molar_rate;
4494 \end_layout
4495
4496 \begin_layout LyX-Code
4497 rate[rxns] IS_A molar_rate; (* mole rxn j/time *)
4498 \end_layout
4499
4500 \begin_layout LyX-Code
4501 FOR i IN species CREATE
4502 \end_layout
4503
4504 \begin_layout LyX-Code
4505 gen_eqn[i]: production[i] =
4506 \end_layout
4507
4508 \begin_layout LyX-Code
4509 SUM[eta[i][j]*rate[j] | j IN reactions[i]];
4510 \end_layout
4511
4512 \begin_layout LyX-Code
4513 END FOR;
4514 \end_layout
4515
4516 \begin_layout LyX-Code
4517 END set_example;
4518 \end_layout
4519
4520 \begin_layout Labeling
4521 \labelwidthstring 00000.00000.00000.000
4522 "
4523 \family typewriter
4524 |
4525 \family default
4526
4527 \begin_inset Index idx
4528 status collapsed
4529
4530 \begin_layout Plain Layout
4531 \begin_inset ERT
4532 status collapsed
4533
4534 \begin_layout Plain Layout
4535
4536 |
4537 \end_layout
4538
4539 \end_inset
4540
4541
4542 \end_layout
4543
4544 \end_inset
4545
4546 " is shorthand for
4547 \family sans
4548 SUCH_THAT
4549 \family default
4550 .
4551 \end_layout
4552
4553 \begin_deeper
4554 \begin_layout Standard
4555 The array
4556 \family typewriter
4557 eta
4558 \family default
4559 has only 8 elements, and we defined those elements in a set for each reaction.
4560 The equation needs to know about the set of reactions for a species
4561 \family typewriter
4562 i
4563 \family default
4564 , and that set is calculated automatically in the models first
4565 \family sans
4566 FOR/CREATE
4567 \family default
4568 statement.
4569
4570 \end_layout
4571
4572 \begin_layout Standard
4573 The
4574 \family typewriter
4575 |
4576 \family default
4577 symbol is the ASCEND III notation for
4578 \family sans
4579 SUCH_THAT
4580 \family default
4581 .
4582 We noted that "
4583 \family typewriter
4584 |
4585 \family default
4586 " is often read as "for all", which is different in that "for all" makes
4587 one think of a
4588 \family sans
4589 FOR
4590 \family default
4591 loop where the loop index is on the left of an
4592 \family sans
4593 IN
4594 \family default
4595 operator.
4596 For example, the
4597 \family typewriter
4598 j
4599 \family default
4600 loop in the
4601 \family sans
4602 SUM
4603 \family default
4604 of
4605 \family typewriter
4606 gen_eqn[i]
4607 \family default
4608 above.
4609
4610 \end_layout
4611
4612 \begin_layout Section
4613 Constants
4614 \begin_inset Index idx
4615 status collapsed
4616
4617 \begin_layout Plain Layout
4618 constants
4619 \end_layout
4620
4621 \end_inset
4622
4623
4624 \end_layout
4625
4626 \begin_layout Standard
4627 ASCEND supports real, integer, boolean and character string constants.
4628 Constants in ASCEND do not have any attributes other than their value.
4629 Constants are scalar quantities that can be assigned exactly once.
4630 Constants may only be assigned using the
4631 \family typewriter
4632 :==
4633 \family default
4634 operator and the RHS expression they are assigned from must itself be constant.
4635 Constants do not have subparts.
4636 Integer and symbol constants may be used in determining the definitions
4637 of sets.
4638
4639 \end_layout
4640
4641 \begin_layout Standard
4642 Explicit refinements of the built-in constant types may be defined as exemplifie
4643 d in the description of real_constant.
4644 Implicit type refinements may be done by instantiating an incompletely
4645 defined constant and assigning its final value.
4646
4647 \end_layout
4648
4649 \begin_layout Standard
4650 Sets could be considered constant because they are assigned only once, however
4651 sets are described separately because they are not quite scalar quantities.
4652 \end_layout
4653
4654 \end_deeper
4655 \begin_layout Labeling
4656 \labelwidthstring 00000.00000.00000.000
4657
4658 \family sans
4659 real_constant
4660 \family default
4661
4662 \begin_inset Index idx
4663 status collapsed
4664
4665 \begin_layout Plain Layout
4666 real
4667 \begin_inset ERT
4668 status collapsed
4669
4670 \begin_layout Plain Layout
4671
4672
4673 \backslash
4674 _
4675 \end_layout
4676
4677 \end_inset
4678
4679 constant
4680 \end_layout
4681
4682 \end_inset
4683
4684 Real number with dimensionality.
4685 Note that the dimensionality of a real constant can be specified via the
4686 type definition without immediately defining the value, as in the following
4687 pair of definitions.
4688 \end_layout
4689
4690 \begin_layout Labeling
4691 \labelwidthstring 00000.00000.00000.000
4692
4693 \bar under
4694 CONSTANT
4695 \begin_inset space ~
4696 \end_inset
4697
4698 declaration
4699 \begin_inset space ~
4700 \end_inset
4701
4702 example:
4703 \end_layout
4704
4705 \begin_deeper
4706 \begin_layout LyX-Code
4707 CONSTANT molar_weight
4708 \end_layout
4709
4710 \begin_layout LyX-Code
4711 REFINES real_constant DIMENSION M/Q;
4712 \end_layout
4713
4714 \begin_layout LyX-Code
4715 CONSTANT hydrogen_weight
4716 \end_layout
4717
4718 \begin_layout LyX-Code
4719 REFINES molar_weight :== 1.004{g/mole};
4720 \end_layout
4721
4722 \end_deeper
4723 \begin_layout Labeling
4724 \labelwidthstring 00000.00000.00000.000
4725
4726 \family sans
4727 integer_constant
4728 \family default
4729
4730 \begin_inset Index idx
4731 status collapsed
4732
4733 \begin_layout Plain Layout
4734 integer
4735 \begin_inset ERT
4736 status collapsed
4737
4738 \begin_layout Plain Layout
4739
4740
4741 \backslash
4742 _
4743 \end_layout
4744
4745 \end_inset
4746
4747 constant
4748 \end_layout
4749
4750 \end_inset
4751
4752 Integer number.
4753 Principally used in determining model structure.
4754 If appearing in equations, integers are evaluated as dimensionless reals.
4755 Typical use is inside a
4756 \family sans
4757 MODEL
4758 \family default
4759 definition and looks like:
4760 \end_layout
4761
4762 \begin_deeper
4763 \begin_layout LyX-Code
4764 n_trays IS_A integer_constant;
4765 \end_layout
4766
4767 \begin_layout LyX-Code
4768 n_trays :== 50;
4769 \end_layout
4770
4771 \begin_layout LyX-Code
4772 tray[1..n_trays] IS_A vl_equilibrium_tray;
4773 \end_layout
4774
4775 \end_deeper
4776 \begin_layout Labeling
4777 \labelwidthstring 00000.00000.00000.000
4778
4779 \family sans
4780 symbol_constant
4781 \family default
4782
4783 \begin_inset Index idx
4784 status collapsed
4785
4786 \begin_layout Plain Layout
4787 symbol
4788 \begin_inset ERT
4789 status collapsed
4790
4791 \begin_layout Plain Layout
4792
4793
4794 \backslash
4795 _
4796 \end_layout
4797
4798 \end_inset
4799
4800 constant
4801 \end_layout
4802
4803 \end_inset
4804
4805 Object with a symbol value.
4806 May be used in determining model structure.
4807 \end_layout
4808
4809 \begin_layout Labeling
4810 \labelwidthstring 00000.00000.00000.000
4811
4812 \family sans
4813 boolean_constant
4814 \family default
4815
4816 \begin_inset Index idx
4817 status collapsed
4818
4819 \begin_layout Plain Layout
4820 boolean
4821 \begin_inset ERT
4822 status collapsed
4823
4824 \begin_layout Plain Layout
4825
4826
4827 \backslash
4828 _
4829 \end_layout
4830
4831 \end_inset
4832
4833 constant
4834 \end_layout
4835
4836 \end_inset
4837
4838 Logical value.
4839 May be used in determining model structure.
4840 \end_layout
4841
4842 \begin_layout Labeling
4843 \labelwidthstring 00000.00000.00000.000
4844
4845 \bar under
4846 Setting
4847 \begin_inset space ~
4848 \end_inset
4849
4850 constants
4851 \bar default
4852
4853 \begin_inset Index idx
4854 status collapsed
4855
4856 \begin_layout Plain Layout
4857 constants, setting
4858 \end_layout
4859
4860 \end_inset
4861
4862
4863 \end_layout
4864
4865 \begin_layout Labeling
4866 \labelwidthstring 00000.00000.00000.000
4867 :==
4868 \begin_inset Index idx
4869 status collapsed
4870
4871 \begin_layout Plain Layout
4872 :==
4873 \end_layout
4874
4875 \end_inset
4876
4877 Constant and set assignment operator.
4878
4879 \end_layout
4880
4881 \begin_deeper
4882 \begin_layout Standard
4883 It is suggested, but not required, that names of all types that refine the
4884 built-in constant types have names that end in _constant.
4885 \end_layout
4886
4887 \begin_layout LyX-Code
4888 LHS_list :== RHS;
4889 \end_layout
4890
4891 \begin_layout Standard
4892 Here it is required that the one or more items in the LHS be of the same
4893 constant type and that RHS is a single-valued expression made up of values,
4894 operators, and other constants.
4895 The
4896 \family typewriter
4897 :==
4898 \family default
4899 is used to make clear to both the user and the system what scalar objects
4900 are constants.
4901
4902 \end_layout
4903
4904 \begin_layout Section
4905 Variables
4906 \begin_inset Index idx
4907 status collapsed
4908
4909 \begin_layout Plain Layout
4910 variables
4911 \end_layout
4912
4913 \end_inset
4914
4915
4916 \end_layout
4917
4918 \begin_layout Standard
4919 There are four built-in types which may be used to construct variables:
4920 symbol, boolean, integer, and real.
4921 At this time symbol types have special restrictions.
4922 Refinements of these variable base types are defined with the
4923 \family sans
4924 ATOM
4925 \family default
4926 statement.
4927 Atom types may declare attribute fields with types real, integer, boolean,
4928 symbol, and set.
4929 These attributes are
4930 \emph on
4931 not
4932 \emph default
4933 independent objects and therefore cannot be refined, merged, or put in
4934 a refinement clique (
4935 \family sans
4936 ARE_ALIKE
4937 \family default
4938 d).
4939 \end_layout
4940
4941 \end_deeper
4942 \begin_layout Labeling
4943 \labelwidthstring 00000.00000.00000.000
4944
4945 \family sans
4946 ATOM
4947 \family default
4948
4949 \begin_inset Index idx
4950 status collapsed
4951
4952 \begin_layout Plain Layout
4953 ATOM
4954 \end_layout
4955
4956 \end_inset
4957
4958 The syntax for declaring a new atom type is
4959 \end_layout
4960
4961 \begin_deeper
4962 \begin_layout LyX-Code
4963 ATOM
4964 \emph on
4965 atom_type_name
4966 \emph default
4967 REFINES
4968 \emph on
4969 variable_type
4970 \end_layout
4971
4972 \begin_layout LyX-Code
4973 «DIMENSION
4974 \emph on
4975 dimension_expression
4976 \emph default
4977 »
4978 \end_layout
4979
4980 \begin_layout LyX-Code
4981 «DEFAULT
4982 \emph on
4983 value
4984 \emph default
4985 »; (* note the ; *)
4986 \end_layout
4987
4988 \begin_layout LyX-Code
4989 «
4990 \emph on
4991 initial attribute assignment
4992 \emph default
4993
4994 \end_layout
4995
4996 \begin_layout LyX-Code
4997 END
4998 \emph on
4999 atom_type_name
5000 \emph default
5001 ;
5002 \end_layout
5003
5004 \end_deeper
5005 \begin_layout Labeling
5006 \labelwidthstring 00000.00000.00000.000
5007
5008 \family sans
5009 DEFAULT
5010 \family default
5011
5012 \begin_inset Index idx
5013 status collapsed
5014
5015 \begin_layout Plain Layout
5016 DEFAULT
5017 \end_layout
5018
5019 \end_inset
5020
5021 ,
5022 \family sans
5023
5024 \begin_inset space ~
5025 \end_inset
5026
5027 DIMENSION
5028 \family default
5029
5030 \begin_inset Index idx
5031 status collapsed
5032
5033 \begin_layout Plain Layout
5034 DIMENSION
5035 \end_layout
5036
5037 \end_inset
5038
5039 ,
5040 \begin_inset space ~
5041 \end_inset
5042
5043 and
5044 \begin_inset space ~
5045 \end_inset
5046
5047
5048 \family sans
5049 DIMENSIONLESS
5050 \family default
5051
5052 \begin_inset Index idx
5053 status collapsed
5054
5055 \begin_layout Plain Layout
5056 DIMENSIONLESS
5057 \end_layout
5058
5059 \end_inset
5060
5061
5062 \end_layout
5063
5064 \begin_deeper
5065 \begin_layout Standard
5066 The
5067 \family sans
5068 DIMENSION
5069 \family default
5070 attribute is for variables whose base type is real.
5071 It is an optional field.
5072 If not defined for any atom with base type real, the dimensions will be
5073 left as undefined.
5074 Any variable which is later declared to be one of these types will be given
5075 wild card dimensionality (represented in the interactive display by an
5076 asterisk (*)).
5077 The system will deduce the dimensionality from its use in the relationships
5078 in which it appears or in the declaring of default values for it, if possible.
5079 \end_layout
5080
5081 \end_deeper
5082 \begin_layout Labeling
5083 \labelwidthstring 00000.00000.00000.000
5084
5085 \family sans
5086 solver_var
5087 \family default
5088
5089 \begin_inset Index idx
5090 status collapsed
5091
5092 \begin_layout Plain Layout
5093 solver
5094 \begin_inset ERT
5095 status collapsed
5096
5097 \begin_layout Plain Layout
5098
5099
5100 \backslash
5101 _
5102 \end_layout
5103
5104 \end_inset
5105
5106 var
5107 \end_layout
5108
5109 \end_inset
5110
5111 is a special case of
5112 \family sans
5113 ATOM
5114 \family default
5115 and we will say much more about it in Section
5116 \begin_inset CommandInset ref
5117 LatexCommand vref
5118 reference "sub:x.6.1Variables-for-solvers"
5119
5120 \end_inset
5121
5122 .
5123 \end_layout
5124
5125 \begin_deeper
5126 \begin_layout LyX-Code
5127 ATOM solver_var REFINES real DEFAULT 0.5 {?
5128 \begin_inset Index idx
5129 status collapsed
5130
5131 \begin_layout Plain Layout
5132 ?
5133 \end_layout
5134
5135 \end_inset
5136
5137 };
5138 \end_layout
5139
5140 \begin_layout LyX-Code
5141 lower_bound IS_A real;
5142 \end_layout
5143
5144 \begin_layout LyX-Code
5145 upper_bound IS_A real;
5146 \end_layout
5147
5148 \begin_layout LyX-Code
5149 nominal IS_A real;
5150 \end_layout
5151
5152 \begin_layout LyX-Code
5153 fixed IS_A boolean;
5154 \end_layout
5155
5156 \begin_layout LyX-Code
5157 fixed := FALSE;
5158 \end_layout
5159
5160 \begin_layout LyX-Code
5161 lower_bound := -1e20 {?};
5162 \end_layout
5163
5164 \begin_layout LyX-Code
5165 upper_bound := 1e20 {?};
5166 \end_layout
5167
5168 \begin_layout LyX-Code
5169 nominal := 0.5 {?};
5170 \end_layout
5171
5172 \begin_layout LyX-Code
5173 END solver_var;
5174 \end_layout
5175
5176 \begin_layout Standard
5177 The default field is also optional.
5178 If the atom has a declared dimensionality, then this value must be expressed
5179 with units which are compatible with this dimensionality.
5180 In the solver_var example, we see a DEFAULT value of 0.5 with the unspecified
5181 unit
5182 \begin_inset Index idx
5183 status collapsed
5184
5185 \begin_layout Plain Layout
5186 unit, unspecified
5187 \end_layout
5188
5189 \end_inset
5190
5191
5192 \begin_inset Index idx
5193 status collapsed
5194
5195 \begin_layout Plain Layout
5196 unspecified unit
5197 \end_layout
5198
5199 \end_inset
5200
5201 {?
5202 \begin_inset Index idx
5203 status collapsed
5204
5205 \begin_layout Plain Layout
5206
5207 \end_layout
5208
5209 \end_inset
5210
5211 } which leaves the dimensionality wild
5212 \begin_inset Index idx
5213 status collapsed
5214
5215 \begin_layout Plain Layout
5216 wild dimensionality
5217 \end_layout
5218
5219 \end_inset
5220
5221 .
5222 \end_layout
5223
5224 \end_deeper
5225 \begin_layout Labeling
5226 \labelwidthstring 00000.00000.00000.000
5227 real
5228 \begin_inset Index idx
5229 status collapsed
5230
5231 \begin_layout Plain Layout
5232 real
5233 \end_layout
5234
5235 \end_inset
5236
5237 Real valued variable quantity.
5238 At present, all variables that you want to be attended to by solver tools
5239 must be refinements of the type solver_var.
5240 This is so that modifiable parametric values can be included in equations
5241 without treating them as variables.
5242 Strictly speaking, this is a characteristic of the solver interface and
5243 not the ASCEND language.
5244 Each tool in the total ASCEND system may have its own semantics that go
5245 beyond the ASCEND object definition language.
5246 \end_layout
5247
5248 \begin_layout Labeling
5249 \labelwidthstring 00000.00000.00000.000
5250 integer
5251 \begin_inset Index idx
5252 status collapsed
5253
5254 \begin_layout Plain Layout
5255 integer
5256 \end_layout
5257
5258 \end_inset
5259
5260 Integer valued variable quantity.
5261 We find these mighty convenient for use in certain procedural computations
5262 and as attributes of solver_var atoms.
5263 \end_layout
5264
5265 \begin_layout Labeling
5266 \labelwidthstring 00000.00000.00000.000
5267 boolean
5268 \begin_inset Index idx
5269 status collapsed
5270
5271 \begin_layout Plain Layout
5272 boolean
5273 \end_layout
5274
5275 \end_inset
5276
5277 Truth valued variable quantity.
5278 These are principally used as flags on solver_vars and relations.
5279 They can also be used procedurally and as variables in logical programming
5280 models, subject to the logical solver tools semantics.
5281 (Compare solver_boolean and boolean_var in Section
5282 \begin_inset CommandInset ref
5283 LatexCommand vref
5284 reference "sec:x.6Miscellany"
5285
5286 \end_inset
5287
5288 .)
5289 \end_layout
5290
5291 \begin_layout Labeling
5292 \labelwidthstring 00000.00000.00000.000
5293 symbol
5294 \begin_inset Index idx
5295 status collapsed
5296
5297 \begin_layout Plain Layout
5298 symbol
5299 \end_layout
5300
5301 \end_inset
5302
5303 Symbol valued variable quantity.
5304 We do not yet have operators for building symbols out of other symbols.
5305 \end_layout
5306
5307 \begin_layout Labeling
5308 \labelwidthstring 00000.00000.00000.000
5309
5310 \bar under
5311 Setting
5312 \begin_inset space ~
5313 \end_inset
5314
5315 variables
5316 \bar default
5317
5318 \begin_inset Index idx
5319 status collapsed
5320
5321 \begin_layout Plain Layout
5322 variables, setting
5323 \end_layout
5324
5325 \end_inset
5326
5327
5328 \end_layout
5329
5330 \begin_layout Labeling
5331 \labelwidthstring 00000.00000.00000.000
5332 :=
5333 \begin_inset Index idx
5334 status collapsed
5335
5336 \begin_layout Plain Layout
5337 :=
5338 \end_layout
5339
5340 \end_inset
5341
5342 Procedural equals
5343 \begin_inset Index idx
5344 status collapsed
5345
5346 \begin_layout Plain Layout
5347 equals, procedural
5348 \end_layout
5349
5350 \end_inset
5351
5352 differs from the ordinary equals (=) in that it means the left-hand-side
5353 (LHS) variables are to be assigned the value of the right-hand-side (RHS)
5354 expression when this statement is processed.
5355 Processing happens in the last phase of compiling (instantiation) or when
5356 executing a method interactively through the ASCEND user interface.
5357 The order the system encounters these statements matters, therefore, with
5358 a later result overwriting an earlier one if both statements have the same
5359 the same LHS variable.
5360
5361 \end_layout
5362
5363 \begin_deeper
5364 \begin_layout Standard
5365 Note that variable assignments (also known as defaulting statements) written
5366 in the declarative section are executed only after an instance has been
5367 fully created.
5368 This is a frequent source of confusion and errors, therefore we recommend
5369 that you DO NOT ASSIGN VARIABLES IN THE DECLARATIVE SECTION.
5370
5371 \end_layout
5372
5373 \end_deeper
5374 \begin_layout Labeling
5375 \labelwidthstring 00000.00000.00000.000
5376 Note
5377 \begin_inset space ~
5378 \end_inset
5379
5380 that
5381 \begin_inset space ~
5382 \end_inset
5383
5384 :=
5385 \begin_inset space ~
5386 \end_inset
5387
5388 IS
5389 \begin_inset space ~
5390 \end_inset
5391
5392 NOT
5393 \begin_inset space ~
5394 \end_inset
5395
5396 =.
5397 \end_layout
5398
5399 \begin_deeper
5400 \begin_layout Standard
5401 We use an ordinary equals (=) when defining a real valued equation to state
5402 that the LHS expression is to equal the RHS expression at the solution
5403 for the model.
5404 We use == for logical equations.
5405 \end_layout
5406
5407 \end_deeper
5408 \begin_layout Labeling
5409 \labelwidthstring 00000.00000.00000.000
5410 \begin_inset Note Note
5411 status open
5412
5413 \begin_layout Labeling
5414 \labelwidthstring 00000.00000.00000.000
5415
5416 \bar under
5417 Tabular
5418 \begin_inset space ~
5419 \end_inset
5420
5421 assignments
5422 \bar default
5423
5424 \begin_inset Index idx
5425 status collapsed
5426
5427 \begin_layout Plain Layout
5428 assignments, tabular
5429 \end_layout
5430
5431 \end_inset
5432
5433 (* 4+ *) Assigning values en masse to arrays of variables that are defined
5434 associatively on sets without order presents a minor challenge.
5435 The solution proposed in ASCEND IV (but not yet implemented as weve not
5436 had time or significant user demand) is to allow a tabular data statement
5437 to be used to assign the elements of arrays of variables or constants.
5438 The DATA statement may be used to assign variables in the declarative or
5439 methods section of a model (though we discourage its use declaratively
5440 for variable initialization) or to assign constant arrays of any type,
5441 including sets, in the declarative section.
5442 Here are some examples:
5443 \end_layout
5444
5445 \begin_layout LyX-Code
5446 DATA ~(* ~4+ ~*)
5447 \end_layout
5448
5449 \begin_deeper
5450 \begin_layout LyX-Code
5451 MODEL tabular_ex;
5452 \end_layout
5453
5454 \begin_layout LyX-Code
5455 lset,rset,cset IS_A set OF integer_constant;
5456 \end_layout
5457
5458 \begin_layout LyX-Code
5459 rset :== [1..3];
5460 \end_layout
5461
5462 \begin_layout LyX-Code
5463 cset :== rset - [2];
5464 \end_layout
5465
5466 \begin_layout LyX-Code
5467 lset :== [5,7];
5468 \end_layout
5469
5470 \begin_layout LyX-Code
5471 a[rset][cset] IS_A real;
5472 \end_layout
5473
5474 \begin_layout LyX-Code
5475 b[lset][cset][rset] IS_A real_constant;
5476 \end_layout
5477
5478 \begin_layout LyX-Code
5479 (* rectangle table *)
5480 \end_layout
5481
5482 \begin_layout LyX-Code
5483 DATA FOR a:
5484 \end_layout
5485
5486 \begin_layout LyX-Code
5487 COLUMNS 1,3; (*order last subscript cset*)
5488 \end_layout
5489
5490 \begin_layout LyX-Code
5491 UNITS {kg/s}, {s}; (* columnar units *)
5492 \end_layout
5493
5494 \begin_layout LyX-Code
5495 (* give leading subscripts *)
5496 \end_layout
5497
5498 \begin_layout LyX-Code
5499 [1] 2.8, 0.3;
5500 \end_layout
5501
5502 \begin_layout LyX-Code
5503 [2] 2.7, 1.3;
5504 \end_layout
5505
5506 \begin_layout LyX-Code
5507 [3] 3.3, 0.6;
5508 \end_layout
5509
5510 \begin_layout LyX-Code
5511 END DATA;
5512 \end_layout
5513
5514 \begin_layout LyX-Code
5515 (* 2 layer rectangle table *)
5516 \end_layout
5517
5518 \begin_layout LyX-Code
5519 CONSTANT DATA FOR b:
5520 \end_layout
5521
5522 \begin_layout LyX-Code
5523 COLUMNS 1..3; (* order last subscript
5524 \end_layout
5525
5526 \begin_layout LyX-Code
5527 rset *)
5528 \end_layout
5529
5530 \begin_layout LyX-Code
5531 (* UNITS omitted, so either the user gives
5532 \end_layout
5533
5534 \begin_layout LyX-Code
5535 value in the table or values given are
5536 \end_layout
5537
5538 \begin_layout LyX-Code
5539 DIMENSIONLESS.
5540 *)
5541 \end_layout
5542
5543 \begin_layout LyX-Code
5544 (* ordering over [lset][cset] required *)
5545 \end_layout
5546
5547 \begin_layout LyX-Code
5548 [5][1] 3 {m}, 2{m}, 1{m};
5549 \end_layout
5550
5551 \begin_layout LyX-Code
5552 [5][3] 0.1, 0.2, 0.3;
5553 \end_layout
5554
5555 \begin_layout LyX-Code
5556 [7][1] -3 {m/s}, -2{m/s}, -1{m/s};
5557 \end_layout
5558
5559 \begin_layout LyX-Code
5560 [7][3] 4.1 {1/s}, 4.2 {1/s}, 4.3 {1/s};
5561 \end_layout
5562
5563 \begin_layout LyX-Code
5564 END DATA;
5565 \end_layout
5566
5567 \begin_layout LyX-Code
5568 END tabular_ex;
5569 \end_layout
5570
5571 \begin_layout Plain Layout
5572 For sparse arrays of variables or constants, the COLUMNS and (possibly)
5573 UNITS keywords are omitted and the array subscripts are simply enumerated
5574 along with the values to be assigned.
5575 \end_layout
5576
5577 \end_deeper
5578 \end_inset
5579
5580
5581 \end_layout
5582
5583 \begin_deeper
5584 \begin_layout Standard
5585
5586 \end_layout
5587
5588 \begin_layout Section
5589 Relations
5590 \begin_inset Index idx
5591 status collapsed
5592
5593 \begin_layout Plain Layout
5594 relations
5595 \end_layout
5596
5597 \end_inset
5598
5599
5600 \end_layout
5601
5602 \end_deeper
5603 \begin_layout Labeling
5604 \labelwidthstring 00000.00000.00000.000
5605
5606 \bar under
5607 Mathematical
5608 \begin_inset space ~
5609 \end_inset
5610
5611 expression
5612 \begin_inset Index idx
5613 status collapsed
5614
5615 \begin_layout Plain Layout
5616 mathematical expression
5617 \end_layout
5618
5619 \end_inset
5620
5621
5622 \begin_inset Index idx
5623 status collapsed
5624
5625 \begin_layout Plain Layout
5626 expression, math
5627 \end_layout
5628
5629 \end_inset
5630
5631 :
5632 \end_layout
5633
5634 \begin_deeper
5635 \begin_layout Standard
5636 The syntax for a mathematical expression is any legal combination of variable
5637 names and arithmetic operators in the normal notation.
5638 An expression may contain any number of matched rounded parentheses, (),
5639 to clarify meaning.
5640 The following is a legal arithmetic expression:
5641 \end_layout
5642
5643 \begin_layout LyX-Code
5644 y^2+(sin(x)-tan(z))*q
5645 \end_layout
5646
5647 \begin_layout Standard
5648 Each additive term in a mathematical expression (terms are separated by
5649 + or - operators) must have the same dimensionality.
5650 \end_layout
5651
5652 \begin_layout Standard
5653 An expression may contain an index variable as a part of the calculation
5654 if that index variable is over a set whose elements are of type integer.
5655 (See the
5656 \family sans
5657 FOR/CREATE
5658 \family default
5659 and
5660 \family sans
5661 FOR/DO
5662 \family default
5663 statements below.) An example is:
5664 \end_layout
5665
5666 \begin_layout LyX-Code
5667 term[i] = a[i]*x^(i-1);
5668 \end_layout
5669
5670 \end_deeper
5671 \begin_layout Labeling
5672 \labelwidthstring 00000.00000.00000.000
5673
5674 \bar under
5675 Numerical
5676 \begin_inset space ~
5677 \end_inset
5678
5679 relations
5680 \bar default
5681
5682 \begin_inset Index idx
5683 status collapsed
5684
5685 \begin_layout Plain Layout
5686 relations, numerical
5687 \end_layout
5688
5689 \end_inset
5690
5691
5692 \begin_inset Index idx
5693 status collapsed
5694
5695 \begin_layout Plain Layout
5696 numerical relations
5697 \end_layout
5698
5699 \end_inset
5700
5701
5702 \end_layout
5703
5704 \begin_deeper
5705 \begin_layout Standard
5706 The syntax for a numeric relation is either
5707 \end_layout
5708
5709 \begin_layout LyX-Code
5710
5711 \emph on
5712 optional_label
5713 \emph default
5714 :
5715 \emph on
5716 LHS relational_operator RHS
5717 \emph default
5718 ;
5719 \end_layout
5720
5721 \begin_layout Standard
5722 or
5723 \end_layout
5724
5725 \begin_layout LyX-Code
5726
5727 \emph on
5728 optional_label
5729 \emph default
5730 :
5731 \emph on
5732 objective_type LHS
5733 \emph default
5734 ;
5735 \end_layout
5736
5737 \begin_layout Standard
5738 Objective_type is either
5739 \family sans
5740 MAXIMIZE
5741 \family default
5742 or
5743 \family sans
5744 MINIMIZE
5745 \family default
5746 .
5747 RHS and LHS must be one or more variables, constants, and operators in
5748 a normal algebraic expression.
5749 The operators allowed are defined below and in Section
5750 \begin_inset CommandInset ref
5751 LatexCommand vref
5752 reference "sub:x.6.3Single-operand-real"
5753
5754 \end_inset
5755
5756 .
5757 Variable integers, booleans, and symbols are not allowed as operands in
5758 numerical relations, nor are boolean constants.
5759 Integer indices declared in
5760 \family sans
5761 FOR/CREATE
5762 \family default
5763 loops are allowed in relations, and they are treated as integer constants.
5764 \end_layout
5765
5766 \end_deeper
5767 \begin_layout Labeling
5768 \labelwidthstring 00000.00000.00000.000
5769
5770 \bar under
5771 Relational
5772 \begin_inset space ~
5773 \end_inset
5774
5775 operators
5776 \begin_inset Index idx
5777 status collapsed
5778
5779 \begin_layout Plain Layout
5780 operators, relational
5781 \end_layout
5782
5783 \end_inset
5784
5785
5786 \begin_inset Index idx
5787 status collapsed
5788
5789 \begin_layout Plain Layout
5790 relational operators
5791 \end_layout
5792
5793 \end_inset
5794
5795 :
5796 \end_layout
5797
5798 \begin_layout Labeling
5799 \labelwidthstring 00000.00000.00000.000
5800 =
5801 \begin_inset Index idx
5802 status collapsed
5803
5804 \begin_layout Plain Layout
5805 =
5806 \end_layout
5807
5808 \end_inset
5809
5810 ,
5811 \begin_inset space ~
5812 \end_inset
5813
5814 >=
5815 \begin_inset Index idx
5816 status collapsed
5817
5818 \begin_layout Plain Layout
5819 >=
5820 \end_layout
5821
5822 \end_inset
5823
5824 ,
5825 \begin_inset space ~
5826 \end_inset
5827
5828 <=
5829 \begin_inset Index idx
5830 status collapsed
5831
5832 \begin_layout Plain Layout
5833 <=
5834 \end_layout
5835
5836 \end_inset
5837
5838 ,
5839 \begin_inset space ~
5840 \end_inset
5841
5842 <
5843 \begin_inset Index idx
5844 status collapsed
5845
5846 \begin_layout Plain Layout
5847 <
5848 \end_layout
5849
5850 \end_inset
5851
5852 ,
5853 \begin_inset space ~
5854 \end_inset
5855
5856 >
5857 \begin_inset Index idx
5858 status collapsed
5859
5860 \begin_layout Plain Layout
5861 >
5862 \end_layout
5863
5864 \end_inset
5865
5866 ,
5867 \begin_inset space ~
5868 \end_inset
5869
5870 <>
5871 \begin_inset Index idx
5872 status collapsed
5873
5874 \begin_layout Plain Layout
5875 <>
5876 \end_layout
5877
5878 \end_inset
5879
5880 These are the numerical relational operators for declarative use.
5881 \end_layout
5882
5883 \begin_deeper
5884 \begin_layout LyX-Code
5885 Ftot*y['methane'] = m['methane'];
5886 \end_layout
5887
5888 \begin_layout LyX-Code
5889 y['ethanol'] >= 0;
5890 \end_layout
5891
5892 \begin_layout Standard
5893 Equations must be dimensionally correct.
5894 \end_layout
5895
5896 \end_deeper
5897 \begin_layout Labeling
5898 \labelwidthstring 00000.00000.00000.000
5899
5900 \family sans
5901 MAXIMIZE
5902 \family default
5903
5904 \begin_inset Index idx
5905 status collapsed
5906
5907 \begin_layout Plain Layout
5908 MAXIMIZE
5909 \end_layout
5910
5911 \end_inset
5912
5913 ,
5914 \begin_inset space ~
5915 \end_inset
5916
5917
5918 \family sans
5919 MINIMIZE
5920 \family default
5921
5922 \begin_inset Index idx
5923 status collapsed
5924
5925 \begin_layout Plain Layout
5926 MINIMIZE
5927 \end_layout
5928
5929 \end_inset
5930
5931
5932 \end_layout
5933
5934 \begin_deeper
5935 \begin_layout Standard
5936 Objective function indicators.
5937
5938 \end_layout
5939
5940 \end_deeper
5941 \begin_layout Labeling
5942 \labelwidthstring 00000.00000.00000.000
5943
5944 \bar under
5945 Binary
5946 \begin_inset space ~
5947 \end_inset
5948
5949 Operators
5950 \begin_inset Index idx
5951 status collapsed
5952
5953 \begin_layout Plain Layout
5954 operators, binary
5955 \end_layout
5956
5957 \end_inset
5958
5959
5960 \begin_inset Index idx
5961 status collapsed
5962
5963 \begin_layout Plain Layout
5964 binary operators
5965 \end_layout
5966
5967 \end_inset
5968
5969 :
5970 \bar default
5971 +, -, *, /, ^.
5972 We follow the usual algebraic order of operations for binary operators.
5973 \end_layout
5974
5975 \begin_layout Labeling
5976 \labelwidthstring 00000.00000.00000.000
5977 +
5978 \begin_inset Index idx
5979 status collapsed
5980
5981 \begin_layout Plain Layout
5982 +, binary math
5983 \end_layout
5984
5985 \end_inset
5986
5987 Plus.
5988 Numerical addition or set union.
5989 \end_layout
5990
5991 \begin_layout Labeling
5992 \labelwidthstring 00000.00000.00000.000
5993 -
5994 \begin_inset Index idx
5995 status collapsed
5996
5997 \begin_layout Plain Layout
5998 -, binary math
5999 \end_layout
6000
6001 \end_inset
6002
6003 Minus.
6004 Numerical subtraction or set difference.
6005 \end_layout
6006
6007 \begin_layout Labeling
6008 \labelwidthstring 00000.00000.00000.000
6009 *
6010 \begin_inset Index idx
6011 status collapsed
6012
6013 \begin_layout Plain Layout
6014 *, binary math
6015 \end_layout
6016
6017 \end_inset
6018
6019 Times.
6020 Numerical multiplication or set intersection.
6021 \end_layout
6022
6023 \begin_layout Labeling
6024 \labelwidthstring 00000.00000.00000.000
6025 /
6026 \begin_inset Index idx
6027 status collapsed
6028
6029 \begin_layout Plain Layout
6030 /
6031 \end_layout
6032
6033 \end_inset
6034
6035 Divide.
6036 Numeric division.
6037 In most cases it implies real division and not integer division.
6038 \end_layout
6039
6040 \begin_layout Labeling
6041 \labelwidthstring 00000.00000.00000.000
6042 ^ Power
6043 \begin_inset Index idx
6044 status collapsed
6045
6046 \begin_layout Plain Layout
6047 power
6048 \end_layout
6049
6050 \end_inset
6051
6052 .
6053 Numeric exponentiation.
6054 If the value of y in x^y is not integer, then x must be greater than 0.0
6055 and dimensionless.
6056 \end_layout
6057
6058 \begin_layout Labeling
6059 \labelwidthstring 00000.00000.00000.000
6060
6061 \bar under
6062 Unary
6063 \begin_inset space ~
6064 \end_inset
6065
6066 Operators
6067 \begin_inset Index idx
6068 status collapsed
6069
6070 \begin_layout Plain Layout
6071 operators, unary
6072 \end_layout
6073
6074 \end_inset
6075
6076
6077 \begin_inset Index idx
6078 status collapsed
6079
6080 \begin_layout Plain Layout
6081 unary operators
6082 \end_layout
6083
6084 \end_inset
6085
6086 :
6087 \bar default
6088 -
6089 \begin_inset Index idx
6090 status collapsed
6091
6092 \begin_layout Plain Layout
6093 -, unary
6094 \end_layout
6095
6096 \end_inset
6097
6098 , ordered_function()
6099 \end_layout
6100
6101 \begin_layout Labeling
6102 \labelwidthstring 00000.00000.00000.000
6103 - Unary minus.
6104 Numeric negation.
6105 There is no unary +
6106 \begin_inset Index idx
6107 status collapsed
6108
6109 \begin_layout Plain Layout
6110 +, math unary
6111 \end_layout
6112
6113 \end_inset
6114
6115 operator.
6116 \end_layout
6117
6118 \begin_layout Labeling
6119 \labelwidthstring 00000.00000.00000.000
6120
6121 \family typewriter
6122 ordered_function
6123 \begin_inset Index idx
6124 status collapsed
6125
6126 \begin_layout Plain Layout
6127 ordered
6128 \begin_inset ERT
6129 status collapsed
6130
6131 \begin_layout Plain Layout
6132
6133
6134 \backslash
6135 _
6136 \end_layout
6137
6138 \end_inset
6139
6140 function
6141 \end_layout
6142
6143 \end_inset
6144
6145 ()
6146 \family default
6147 unary real valued functions.
6148 The unary real functions we support are given in section Section
6149 \begin_inset CommandInset ref
6150 LatexCommand vref
6151 reference "sub:x.6.3Single-operand-real"
6152
6153 \end_inset
6154
6155 .
6156 \end_layout
6157
6158 \begin_layout Labeling
6159 \labelwidthstring 00000.00000.00000.000
6160 Real
6161 \begin_inset space ~
6162 \end_inset
6163
6164 functions
6165 \begin_inset space ~
6166 \end_inset
6167
6168 of
6169 \begin_inset space ~
6170 \end_inset
6171
6172 sets
6173 \begin_inset space ~
6174 \end_inset
6175
6176 of
6177 \begin_inset space ~
6178 \end_inset
6179
6180 real
6181 \begin_inset space ~
6182 \end_inset
6183
6184 terms:
6185 \end_layout
6186
6187 \begin_layout Labeling
6188 \labelwidthstring 00000.00000.00000.000
6189
6190 \family sans
6191 SUM
6192 \family default
6193
6194 \begin_inset Index idx
6195 status collapsed
6196
6197 \begin_layout Plain Layout
6198 SUM
6199 \end_layout
6200
6201 \end_inset
6202
6203
6204 \family typewriter
6205 [term
6206 \begin_inset space ~
6207 \end_inset
6208
6209 set]
6210 \family default
6211 Add all expressions in the functions list.
6212 \end_layout
6213
6214 \begin_deeper
6215 \begin_layout Standard
6216 For the
6217 \family sans
6218 SUM
6219 \family default
6220 , the base type real items can be arbitrary arithmetic expressions.
6221 The resulting items must all be dimensionally compatible.
6222 \end_layout
6223
6224 \begin_layout Standard
6225 An examples of the use is:
6226 \end_layout
6227
6228 \begin_layout LyX-Code
6229 SUM[y[components]] = 1;
6230 \end_layout
6231
6232 \begin_layout Standard
6233 or, equivalently, one could write:
6234 \end_layout
6235
6236 \begin_layout LyX-Code
6237 SUM[y[i] | i IN components] = 1;
6238 \end_layout
6239
6240 \end_deeper
6241 \begin_layout Labeling
6242 \labelwidthstring 00000.00000.00000.000
6243
6244 \bar under
6245 Empty
6246 \begin_inset space ~
6247 \end_inset
6248
6249
6250 \family sans
6251 SUM
6252 \family default
6253
6254 \begin_inset space ~
6255 \end_inset
6256
6257 yields
6258 \begin_inset space ~
6259 \end_inset
6260
6261 wildcard
6262 \begin_inset space ~
6263 \end_inset
6264
6265
6266 \family typewriter
6267 0
6268 \family default
6269 .
6270 \end_layout
6271
6272 \begin_deeper
6273 \begin_layout Standard
6274 When a
6275 \family sans
6276 SUM
6277 \family default
6278 is compiled over a list which is empty it generates a wildcard-dimensioned
6279
6280 \family typewriter
6281 0
6282 \family default
6283 .
6284 This will sometimes cause our dimension checking routines to fail.
6285 The best way to prevent this is to make sure the SUM never actually encounters
6286 an empty list.
6287 For example:
6288 \end_layout
6289
6290 \begin_layout LyX-Code
6291 SUM[Q[possibly_empty_set], 0{watt}];
6292 \end_layout
6293
6294 \begin_layout Standard
6295 In the above, the variables
6296 \family typewriter
6297 Q[i]
6298 \family default
6299 (if they exist) have the dimensionality associated with an energy rate.
6300 When the set is empty, the
6301 \family typewriter
6302 0
6303 \family default
6304 is the only term in the
6305 \family sans
6306 SUM
6307 \family default
6308 and establishes the dimensionality of the result.
6309 When the set is
6310 \emph on
6311 not
6312 \emph default
6313 empty the compiler will simplify away the trailing
6314 \family typewriter
6315 0
6316 \family default
6317 in the sum.
6318 \end_layout
6319
6320 \end_deeper
6321 \begin_layout Labeling
6322 \labelwidthstring 00000.00000.00000.000
6323 PROD
6324 \begin_inset Index idx
6325 status collapsed
6326
6327 \begin_layout Plain Layout
6328 PROD
6329 \end_layout
6330
6331 \end_inset
6332
6333 [term
6334 \begin_inset space ~
6335 \end_inset
6336
6337 set] Multiply all the expressions in the products list.
6338 The product of an empty list is a dimensionless value, 1.0.
6339 \end_layout
6340
6341 \begin_layout Labeling
6342 \labelwidthstring 00000.00000.00000.000
6343
6344 \bar under
6345 Possible
6346 \begin_inset space ~
6347 \end_inset
6348
6349 future
6350 \begin_inset space ~
6351 \end_inset
6352
6353 functions:
6354 \end_layout
6355
6356 \begin_deeper
6357 \begin_layout Standard
6358 (Not implemented - only under confused consideration at this time.) The following
6359 functions only work in methods as they are not smooth function and would
6360 destroy a Newton-based solution algorithm if used in defining a model equation:
6361 \begin_inset Note Note
6362 status open
6363
6364 \begin_layout Plain Layout
6365 Clarification required
6366 \end_layout
6367
6368 \end_inset
6369
6370
6371 \end_layout
6372
6373 \end_deeper
6374 \begin_layout Labeling
6375 \labelwidthstring 00000.00000.00000.000
6376 MAX
6377 \begin_inset Index idx
6378 status collapsed
6379
6380 \begin_layout Plain Layout
6381 MAX
6382 \end_layout
6383
6384 \end_inset
6385
6386 [term
6387 \begin_inset space ~
6388 \end_inset
6389
6390 set] (* 4+ *) maximum value on list of arguments
6391 \end_layout
6392
6393 \begin_layout Labeling
6394 \labelwidthstring 00000.00000.00000.000
6395 MIN
6396 \begin_inset Index idx
6397 status collapsed
6398
6399 \begin_layout Plain Layout
6400 MIN
6401 \end_layout
6402
6403 \end_inset
6404
6405 [term
6406 \begin_inset space ~
6407 \end_inset
6408
6409 set] (* 4+ *) minimum value on list of arguments
6410 \end_layout
6411
6412 \begin_deeper
6413 \begin_layout Standard
6414 \begin_inset Note Note
6415 status open
6416
6417 \begin_layout Section
6418 Derivatives
6419 \begin_inset Index idx
6420 status collapsed
6421
6422 \begin_layout Plain Layout
6423 derivatives
6424 \end_layout
6425
6426 \end_inset
6427
6428 in relations
6429 \end_layout
6430
6431 \begin_layout Plain Layout
6432 Simply put, we would like to have general partial and full derivatives usable
6433 in writing equations, as there are many mathematically interesting things
6434 that can be said about both.
6435 We have not implemented such things yet for lack of time and because with
6436 several implementations (see gPROMS and OMOLA, among others) already out
6437 there we cant see too many research points to be gained by more derivative
6438 work.
6439 \end_layout
6440
6441 \end_inset
6442
6443
6444 \end_layout
6445
6446 \begin_layout Section
6447 External relations
6448 \begin_inset Index idx
6449 status collapsed
6450
6451 \begin_layout Plain Layout
6452 relations, external
6453 \end_layout
6454
6455 \end_inset
6456
6457
6458 \begin_inset Index idx
6459 status collapsed
6460
6461 \begin_layout Plain Layout
6462 external relations
6463 \end_layout
6464
6465 \end_inset
6466
6467
6468 \end_layout
6469
6470 \begin_layout Standard
6471 We cannot document these at the present time.
6472 Some details are available in Kirk Abbott's thesis
6473 \begin_inset CommandInset citation
6474 LatexCommand cite
6475 key "Abbott1996a"
6476
6477 \end_inset
6478
6479 , or check the wiki at
6480 \family sans
6481 http://ascendwiki.cheme.cmu.edu/
6482 \end_layout
6483
6484 \begin_layout Section
6485 Conditional modelling
6486 \begin_inset Index idx
6487 status collapsed
6488
6489 \begin_layout Plain Layout
6490 relations, conditional
6491 \end_layout
6492
6493 \end_inset
6494
6495
6496 \begin_inset Index idx
6497 status collapsed
6498
6499 \begin_layout Plain Layout
6500 conditional relations
6501 \end_layout
6502
6503 \end_inset
6504
6505
6506 \end_layout
6507
6508 \begin_layout Subsection
6509 Conditional relations
6510 \end_layout
6511
6512 \begin_layout Standard
6513 The syntax is
6514 \end_layout
6515
6516 \begin_layout LyX-Code
6517 CONDITIONAL
6518 \end_layout
6519
6520 \begin_layout LyX-Code
6521
6522 \emph on
6523 list_of_relation_statements
6524 \end_layout
6525
6526