Parent Directory | Revision Log

Revision **2785** -
(**show annotations**)
(**download**)
(**as text**)

*Mon Jun 23 08:17:49 2014 UTC*
(4 years, 6 months ago)
by *jpye*

File MIME type: application/x-lyx

File size: 31320 byte(s)

File MIME type: application/x-lyx

File size: 31320 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 | \use_default_options false |

7 | \maintain_unincluded_children false |

8 | \language english |

9 | \language_package default |

10 | \inputencoding auto |

11 | \fontencoding global |

12 | \font_roman default |

13 | \font_sans default |

14 | \font_typewriter default |

15 | \font_math auto |

16 | \font_default_family default |

17 | \use_non_tex_fonts false |

18 | \font_sc false |

19 | \font_osf false |

20 | \font_sf_scale 100 |

21 | \font_tt_scale 100 |

22 | \graphics default |

23 | \default_output_format default |

24 | \output_sync 0 |

25 | \bibtex_command default |

26 | \index_command default |

27 | \paperfontsize default |

28 | \spacing single |

29 | \use_hyperref false |

30 | \papersize a4paper |

31 | \use_geometry false |

32 | \use_package amsmath 2 |

33 | \use_package amssymb 2 |

34 | \use_package cancel 1 |

35 | \use_package esint 0 |

36 | \use_package mathdots 0 |

37 | \use_package mathtools 1 |

38 | \use_package mhchem 0 |

39 | \use_package stackrel 1 |

40 | \use_package stmaryrd 1 |

41 | \use_package undertilde 1 |

42 | \cite_engine basic |

43 | \cite_engine_type default |

44 | \biblio_style plain |

45 | \use_bibtopic false |

46 | \use_indices false |

47 | \paperorientation portrait |

48 | \suppress_date false |

49 | \justification true |

50 | \use_refstyle 0 |

51 | \index Index |

52 | \shortcut idx |

53 | \color #008000 |

54 | \end_index |

55 | \secnumdepth 3 |

56 | \tocdepth 3 |

57 | \paragraph_separation indent |

58 | \paragraph_indentation default |

59 | \quotes_language english |

60 | \papercolumns 1 |

61 | \papersides 2 |

62 | \paperpagestyle default |

63 | \tracking_changes false |

64 | \output_changes false |

65 | \html_math_output 0 |

66 | \html_css_as_file 0 |

67 | \html_be_strict false |

68 | \end_header |

69 | |

70 | \begin_body |

71 | |

72 | \begin_layout Chapter |

73 | Defining Variables and Scaling Values |

74 | \begin_inset CommandInset label |

75 | LatexCommand label |

76 | name "cha:atoms" |

77 | |

78 | \end_inset |

79 | |

80 | |

81 | \end_layout |

82 | |

83 | \begin_layout Standard |

84 | \begin_inset Marginal |

85 | status collapsed |

86 | |

87 | \begin_layout Plain Layout |

88 | the purpose of this chapter |

89 | \end_layout |

90 | |

91 | \end_inset |

92 | |

93 | By now you have probably read Chapter |

94 | \begin_inset space ~ |

95 | \end_inset |

96 | |

97 | |

98 | \begin_inset CommandInset ref |

99 | LatexCommand vref |

100 | reference "cha:model1" |

101 | |

102 | \end_inset |

103 | |

104 | and seen an example of how to create a model using existing variable types |

105 | in ASCEND. |

106 | You found that variables of types area, length, mass, mass_density, and |

107 | volume were needed and that they could be found in the library |

108 | \family typewriter |

109 | atoms.a4l |

110 | \family default |

111 | . |

112 | You want to know how to generalize on that; how to use variables, constants, |

113 | and scaling values in your own models so that the models will be easier |

114 | to solve. |

115 | \end_layout |

116 | |

117 | \begin_layout Standard |

118 | This chapter is meant to explain the following things: |

119 | \end_layout |

120 | |

121 | \begin_layout Itemize |

122 | The "Big Picture" of how variables, constants, and scaling values relate |

123 | to the rest of the ASCEND IV language and to equations in particular. |

124 | We'll keep it simple here. |

125 | More precise explanations for the language purist can be found in our syntax |

126 | document **syntax.fm5**. |

127 | You do not need to read about the "Big Picture" in order to read and use |

128 | the other parts of this chapter, but you may find it helpful if you are |

129 | having trouble writing an equation |

130 | \begin_inset Index idx |

131 | status collapsed |

132 | |

133 | \begin_layout Plain Layout |

134 | equation, writing |

135 | \end_layout |

136 | |

137 | \end_inset |

138 | |

139 | so that ASCEND will accept it. |

140 | \end_layout |

141 | |

142 | \begin_layout Itemize |

143 | How to find the type of variable (or constant) you want. |

144 | We keep a mess of interesting |

145 | \family typewriter |

146 | ATOM |

147 | \family default |

148 | and |

149 | \family typewriter |

150 | CONSTANT |

151 | \family default |

152 | definitions in |

153 | \family typewriter |

154 | atoms.a4l |

155 | \family default |

156 | . |

157 | We provide tools to search in already loaded libraries to locate the type |

158 | you need. |

159 | \end_layout |

160 | |

161 | \begin_layout Itemize |

162 | How to define a new type of variable when we do not have a predefined |

163 | \family typewriter |

164 | ATOM |

165 | \family default |

166 | or |

167 | \family typewriter |

168 | CONSTANT |

169 | \family default |

170 | that suits your needs. |

171 | It is very easy to define your own variable types by copying code into |

172 | an atoms library of your own from |

173 | \family typewriter |

174 | atoms.a4l |

175 | \family default |

176 | and then editing the copied definition. |

177 | \end_layout |

178 | |

179 | \begin_layout Itemize |

180 | How to define a scaling variable to make your equations much easier to solve. |

181 | \end_layout |

182 | |

183 | \begin_layout Section |

184 | The Big Picture: a taxonomy |

185 | \begin_inset Index idx |

186 | status collapsed |

187 | |

188 | \begin_layout Plain Layout |

189 | taxonomy |

190 | \end_layout |

191 | |

192 | \end_inset |

193 | |

194 | |

195 | \end_layout |

196 | |

197 | \begin_layout Standard |

198 | As you read in Chapter |

199 | \begin_inset space ~ |

200 | \end_inset |

201 | |

202 | |

203 | \begin_inset CommandInset ref |

204 | LatexCommand ref |

205 | reference "cha:model1" |

206 | |

207 | \end_inset |

208 | |

209 | , simulations are built from MODEL and ATOM definitions, and MODEL and ATOM |

210 | definitions are defined by creating types in an ASCEND language text file |

211 | that you load into the ASCEND system. |

212 | Figure |

213 | \begin_inset CommandInset ref |

214 | LatexCommand ref |

215 | reference "fig:atoms.taxonomy" |

216 | |

217 | \end_inset |

218 | |

219 | |

220 | \noun off |

221 | shows the types of objects that can be defined. |

222 | You can see there are many more types than simply real variables used for |

223 | writing equations. |

224 | Some of these types can also be used in equations. |

225 | You also see that there are three kinds of equations, not simply real relations. |

226 | Throughout our documentation we call real relations simply "relations" |

227 | because that is the kind of equation most people are interested in most |

228 | of the time. |

229 | Notice that "scaling values" do not appear in this diagram. |

230 | We will cover scaling values at the end of this The major features of this |

231 | diagram are: |

232 | \end_layout |

233 | |

234 | \begin_layout Standard |

235 | \begin_inset Float figure |

236 | wide false |

237 | sideways false |

238 | status open |

239 | |

240 | \begin_layout Plain Layout |

241 | \align center |

242 | |

243 | \noun off |

244 | \begin_inset Graphics |

245 | filename howto-atomsFig1.eps |

246 | scale 90 |

247 | |

248 | \end_inset |

249 | |

250 | |

251 | \end_layout |

252 | |

253 | \begin_layout Plain Layout |

254 | \begin_inset Caption Standard |

255 | |

256 | \begin_layout Plain Layout |

257 | \begin_inset CommandInset label |

258 | LatexCommand label |

259 | name "fig:atoms.taxonomy" |

260 | |

261 | \end_inset |

262 | |

263 | The big picture: how to think about variables |

264 | \end_layout |

265 | |

266 | \end_inset |

267 | |

268 | |

269 | \end_layout |

270 | |

271 | \end_inset |

272 | |

273 | |

274 | \end_layout |

275 | |

276 | \begin_layout Paragraph |

277 | |

278 | \noun off |

279 | \begin_inset Index idx |

280 | status collapsed |

281 | |

282 | \begin_layout Plain Layout |

283 | atom |

284 | \end_layout |

285 | |

286 | \end_inset |

287 | |

288 | |

289 | \noun default |

290 | ATOM |

291 | \end_layout |

292 | |

293 | \begin_layout Itemize |

294 | Any variable quantity for use in relations, logical relations, or when statement |

295 | s or other computations. |

296 | These come in the usual programming language flavors real, boolean, symbol, |

297 | integer. |

298 | Not all kinds of atoms can be used in all kinds of equations, as we shall |

299 | explain when describing relations in a little bit. |

300 | Atoms may be assigned values many times interactively, with the Script |

301 | ASSIGN statement, with the METHOD := assignment operator, or by an ASCEND |

302 | client such as a solver. |

303 | \end_layout |

304 | |

305 | \begin_layout Standard |

306 | An ATOM may have attributes other than its value, such as .fixed in solver_var, |

307 | but these attributes are not atoms. |

308 | They are subatomic particles and cannot be used in equations. |

309 | These attributes are interpretable by ASCEND clients, and assignable by |

310 | the user in the same ways that the user assigns atom values. |

311 | \end_layout |

312 | |

313 | \begin_layout Standard |

314 | Each subatomic particle instance belongs to exactly one atom instance (one |

315 | variable in your compiled simulation). |

316 | This contrasts with an atom instance which can be shared among several |

317 | models by passing the atom instance from one model into another or by creating |

318 | aliases for it. |

319 | \end_layout |

320 | |

321 | \begin_layout Paragraph |

322 | \begin_inset Index idx |

323 | status collapsed |

324 | |

325 | \begin_layout Plain Layout |

326 | constant |

327 | \end_layout |

328 | |

329 | \end_inset |

330 | |

331 | CONSTANT |

332 | \end_layout |

333 | |

334 | \begin_layout Itemize |

335 | Constants are "variables" that can be assigned no more than once. |

336 | By convention, all constant types in atoms.a4l have names that end in _constant |

337 | so that they are not easily confused with atoms. |

338 | A constant gets a values from the DEFAULT portion of its type definition, |

339 | by an interactive assignment, or by an assignment in the a model which |

340 | uses the :== assignment operator. |

341 | Constants cannot be assigned in a METHOD, nor can they be assigned with |

342 | the := operator. |

343 | \end_layout |

344 | |

345 | \begin_layout Standard |

346 | Integer and symbol constants can appear as members of sets or as subscripts |

347 | of arrays. |

348 | Integer, boolean, and symbol constants can be used to control SELECT statements |

349 | which determine your simulation's structure at compile-time or to control |

350 | SWITCH and WHEN behavior during problem solving . |

351 | \end_layout |

352 | |

353 | \begin_layout Paragraph |

354 | \begin_inset Index idx |

355 | status collapsed |

356 | |

357 | \begin_layout Plain Layout |

358 | set |

359 | \end_layout |

360 | |

361 | \end_inset |

362 | |

363 | set |

364 | \end_layout |

365 | |

366 | \begin_layout Itemize |

367 | Sets are unordered lists of either integer or symbol constants. |

368 | A set is assigned its value exactly once. |

369 | The user interface always presents a set in sorted order, but this is for |

370 | convenience only. |

371 | Sets are useful for defining an array range or for writing indexed relations. |

372 | More about sets and their use can be found in **syntax.fm5**. |

373 | \end_layout |

374 | |

375 | \begin_layout Paragraph |

376 | \begin_inset Index idx |

377 | status collapsed |

378 | |

379 | \begin_layout Plain Layout |

380 | relationship |

381 | \end_layout |

382 | |

383 | \end_inset |

384 | |

385 | relationships |

386 | \end_layout |

387 | |

388 | \begin_layout Itemize |

389 | Relations and logical relations allow you to state |

390 | \begin_inset Index idx |

391 | status collapsed |

392 | |

393 | \begin_layout Plain Layout |

394 | equalities |

395 | \end_layout |

396 | |

397 | \end_inset |

398 | |

399 | equalities and |

400 | \begin_inset Index idx |

401 | status collapsed |

402 | |

403 | \begin_layout Plain Layout |

404 | inequalitites |

405 | \end_layout |

406 | |

407 | \end_inset |

408 | |

409 | inequalities among the variables and constants in you models. |

410 | WHEN statements allow you to state relationships among the models and equations |

411 | which depend on the values of variables in those models. |

412 | Sets and symbols are not allowed in real or logical relations except when |

413 | used as array subscripts. |

414 | \end_layout |

415 | |

416 | \begin_layout Standard |

417 | Real |

418 | \begin_inset Index idx |

419 | status collapsed |

420 | |

421 | \begin_layout Plain Layout |

422 | real |

423 | \end_layout |

424 | |

425 | \end_inset |

426 | |

427 | |

428 | \begin_inset Index idx |

429 | status collapsed |

430 | |

431 | \begin_layout Plain Layout |

432 | relation, real |

433 | \end_layout |

434 | |

435 | \end_inset |

436 | |

437 | relations relate the values of real atoms, real constants, and integer constants. |

438 | Real relations cannot contain boolean constants and atoms, nor can they |

439 | contain integer atoms. |

440 | |

441 | \end_layout |

442 | |

443 | \begin_layout Standard |

444 | Logical |

445 | \begin_inset Index idx |

446 | status collapsed |

447 | |

448 | \begin_layout Plain Layout |

449 | logical |

450 | \end_layout |

451 | |

452 | \end_inset |

453 | |

454 | relations |

455 | \begin_inset Index idx |

456 | status collapsed |

457 | |

458 | \begin_layout Plain Layout |

459 | logical relation |

460 | \end_layout |

461 | |

462 | \end_inset |

463 | |

464 | relate the values of boolean atoms and boolean constants. |

465 | The |

466 | \family typewriter |

467 | SATISFIED |

468 | \family default |

469 | |

470 | \begin_inset Index idx |

471 | status collapsed |

472 | |

473 | \begin_layout Plain Layout |

474 | SATISFIED |

475 | \end_layout |

476 | |

477 | \end_inset |

478 | |

479 | operator makes it possible to include real relations in a logical relation. |

480 | Neither integer atoms and constants nor real atoms and constants are allowed |

481 | in logical relations. |

482 | If you find yourself trying to write an equation with integer atoms, you |

483 | are really creating a conditional model for which you should use the WHEN |

484 | statement instead. |

485 | See **conditional modeling** to learn about how ASCEND represents this |

486 | kind of mathematical model. |

487 | There are also a real variable types, solver_integer and solver_binary, |

488 | which are used to formulate equations when the solver is expected to initially |

489 | treat the variable as a real value but drive it to an integer or 0-1 value |

490 | at the solution. |

491 | The integer programming features of ASCEND are described **elsewhere**. |

492 | \end_layout |

493 | |

494 | \begin_layout Standard |

495 | Like atoms, real and logical relations may have attributes, subatomic particles |

496 | for use by ASCEND clients and users. |

497 | The name of a relation can be used in writing logical relations and WHEN |

498 | statements. |

499 | |

500 | \end_layout |

501 | |

502 | \begin_layout Standard |

503 | WHEN statements are outside the scope of this chapter; please see **conditional |

504 | modeling** or **syntax.fm5** for the details. |

505 | \end_layout |

506 | |

507 | \begin_layout Paragraph |

508 | \begin_inset Index idx |

509 | status collapsed |

510 | |

511 | \begin_layout Plain Layout |

512 | model |

513 | \end_layout |

514 | |

515 | \end_inset |

516 | |

517 | |

518 | \family typewriter |

519 | MODEL |

520 | \end_layout |

521 | |

522 | \begin_layout Itemize |

523 | A model is simply a container for a collection of atoms, constants, sets, |

524 | relations, logical relations, when statements, and arrays of any of these. |

525 | The container also specifies some of the methods that can be used to manipulate |

526 | its contents. |

527 | Compiling a model creates an instance of it-- a simulation |

528 | \begin_inset Index idx |

529 | status collapsed |

530 | |

531 | \begin_layout Plain Layout |

532 | simulation |

533 | \end_layout |

534 | |

535 | \end_inset |

536 | |

537 | . |

538 | \end_layout |

539 | |

540 | \begin_layout Paragraph |

541 | |

542 | \family typewriter |

543 | SOLVER_VAR |

544 | \end_layout |

545 | |

546 | \begin_layout Itemize |

547 | The real atom type |

548 | \family typewriter |

549 | solver_var |

550 | \family default |

551 | is the type from which all real variables that you want the system to solve |

552 | for must spring. |

553 | If you define a real variable using a type which is not a refinement of |

554 | |

555 | \family typewriter |

556 | solver_var |

557 | \family default |

558 | , all solvers will treat that variable as an a scaling value or other given |

559 | constant rather than as a variable. |

560 | |

561 | \end_layout |

562 | |

563 | \begin_layout Standard |

564 | Solver_vars have a number of subatomic attributes ( |

565 | \family typewriter |

566 | upper_bound |

567 | \family default |

568 | , |

569 | \family typewriter |

570 | lower_bound |

571 | \family default |

572 | , and so forth) that help solvers find the solution of your model. |

573 | ATOM definitions specify appropriate default values for these attributes |

574 | that depend on the expected applications of the atom. |

575 | These attribute values can (and should) be modified by methods in the final |

576 | application model where the most accurate problem information is available. |

577 | \end_layout |

578 | |

579 | \begin_layout Paragraph |

580 | Scaling |

581 | \begin_inset Index idx |

582 | status collapsed |

583 | |

584 | \begin_layout Plain Layout |

585 | scaling |

586 | \end_layout |

587 | |

588 | \end_inset |

589 | |

590 | value |

591 | \end_layout |

592 | |

593 | \begin_layout Itemize |

594 | A real that is not a member of the |

595 | \family typewriter |

596 | solver_var |

597 | \family default |

598 | family is ignored by the solver. |

599 | Numerical solvers for problems with many equations in many variables work |

600 | better if the error computed for each equation (before the system is solved) |

601 | is of approximately size 1.0. |

602 | This is most critical when you are starting to solve a new problem at values |

603 | far, far away from the solution. |

604 | When the error of one equation is much larger than the errors in the others, |

605 | that error will skew the behavior of most numerical solvers and will cause |

606 | poor performance. |

607 | |

608 | \end_layout |

609 | |

610 | \begin_layout Standard |

611 | This is one of the many reasons that scientists and engineers work with |

612 | dimensionless models |

613 | \begin_inset Index idx |

614 | status collapsed |

615 | |

616 | \begin_layout Plain Layout |

617 | dimensionless models |

618 | \end_layout |

619 | |

620 | \end_inset |

621 | |

622 | : the process of scaling the equations into dimensionless form has the effect |

623 | of making the error of each equation roughly the same size even far away |

624 | from the solution. |

625 | It is sometimes easiest to obtain a dimensionless equation by writing the |

626 | equation in its dimensional form using natural variables and then dividing |

627 | both sides by an appropriate scaling value. |

628 | We will see how to define an atom for scaling purposes in the last part |

629 | of this chapter. |

630 | \end_layout |

631 | |

632 | \begin_layout Section |

633 | How to find the right variable type |

634 | \begin_inset Index idx |

635 | status collapsed |

636 | |

637 | \begin_layout Plain Layout |

638 | type, variable |

639 | \end_layout |

640 | |

641 | \end_inset |

642 | |

643 | |

644 | \end_layout |

645 | |

646 | \begin_layout Standard |

647 | The type of real atom you want to use depends first on the dimensionality |

648 | (length, mass/time, etc.) needed and then on the application in which the |

649 | atom is going to be used. |

650 | For example, if you are modeling a moving car and you want an atom type |

651 | to describe the car's speed, then you need to find an atom with dimensionality |

652 | length/time or in ASCEND terms L/T. |

653 | There may be two or three types with this dimensionality, possibly including |

654 | real_constants, a real scaling value, and an atom derived from solver_var. |

655 | \end_layout |

656 | |

657 | \begin_layout Standard |

658 | \begin_inset Marginal |

659 | status collapsed |

660 | |

661 | \begin_layout Plain Layout |

662 | Load atoms.a4l |

663 | \end_layout |

664 | |

665 | \end_inset |

666 | |

667 | The first step to finding the variable type needed is to make sure that |

668 | atoms.a4l is loaded in your Library window from |

669 | \family typewriter |

670 | ascend4/models/atoms.a4l |

671 | \family default |

672 | . |

673 | \end_layout |

674 | |

675 | \begin_layout Standard |

676 | \begin_inset Marginal |

677 | status collapsed |

678 | |

679 | \begin_layout Plain Layout |

680 | Find an ATOM or CONSTANT by units |

681 | \end_layout |

682 | |

683 | \end_inset |

684 | |

685 | The next step is to open the "ATOM by units" dialog found in the Library |

686 | window's Find menu. |

687 | This dialog asks for the units of the real variable type you want. |

688 | For our example, speed, you would enter "feet/second," "furlongs/fortnight," |

689 | "meter^3/second/ft^2" or any other combination of units that corresponds |

690 | to the dimensionality L/T. |

691 | |

692 | \end_layout |

693 | |

694 | \begin_layout Standard |

695 | If the system is able to deduce the dimensionality of the units you have |

696 | entered, it will return a list of all the currently loaded ATOM and CONSTANT |

697 | definitions with matching dimensions. |

698 | It may fail to understand the units, in which case you should try the correspon |

699 | ding SI units. |

700 | If it understands the units but there are no matching atoms or constants, |

701 | you will be duly informed. |

702 | If there is no atom that meets your needs, you should create one as outlined |

703 | in **the next section**. |

704 | \end_layout |

705 | |

706 | \begin_layout Standard |

707 | \begin_inset Marginal |

708 | status collapsed |

709 | |

710 | \begin_layout Plain Layout |

711 | Selecting the right type |

712 | \end_layout |

713 | |

714 | \end_inset |

715 | |

716 | The resulting list of types includes a Code button which will display the |

717 | definition of any of the types listed once you select (highlight) that |

718 | type with the mouse. |

719 | Usually you will need to examine several of the alternatives to see which |

720 | one is most appropriate to the physics and mathematics of your problem. |

721 | Compare the default, bounds, and nominal values defined to those you need. |

722 | Check whether the type you are looking at is a |

723 | \family typewriter |

724 | CONSTANT |

725 | \family default |

726 | or an |

727 | \family typewriter |

728 | ATOM |

729 | \family default |

730 | . |

731 | |

732 | \end_layout |

733 | |

734 | \begin_layout Standard |

735 | You now know the name of the variable type you need, or you know that you |

736 | must create a new one to suit your needs. |

737 | \end_layout |

738 | |

739 | \begin_layout Section |

740 | How to define a new type of variable |

741 | \begin_inset Index idx |

742 | status collapsed |

743 | |

744 | \begin_layout Plain Layout |

745 | type, variable |

746 | \end_layout |

747 | |

748 | \end_inset |

749 | |

750 | |

751 | \begin_inset CommandInset label |

752 | LatexCommand label |

753 | name "ssec:atoms.newVarType" |

754 | |

755 | \end_inset |

756 | |

757 | |

758 | \end_layout |

759 | |

760 | \begin_layout Standard |

761 | In this section we will give examples of defining the atom and constant |

762 | types as well as outline a few exceptional situations when you should NOT |

763 | define a new type. |

764 | More examples can be found and copied from |

765 | \family typewriter |

766 | atoms.a4l |

767 | \family default |

768 | . |

769 | You should define your new atoms in your personal atoms library. |

770 | |

771 | \end_layout |

772 | |

773 | \begin_layout Standard |

774 | \begin_inset Marginal |

775 | status collapsed |

776 | |

777 | \begin_layout Plain Layout |

778 | Saving customized variable types |

779 | \end_layout |

780 | |

781 | \end_inset |

782 | |

783 | The user data file |

784 | \family typewriter |

785 | ~ |

786 | \backslash |

787 | ascdata |

788 | \backslash |

789 | myatoms.a4l |

790 | \family default |

791 | is the normal location for a personal |

792 | \begin_inset Index idx |

793 | status collapsed |

794 | |

795 | \begin_layout Plain Layout |

796 | library, personal |

797 | \end_layout |

798 | |

799 | \end_inset |

800 | |

801 | library. |

802 | This file contains the following three lines and then the |

803 | \family typewriter |

804 | ATOM |

805 | \family default |

806 | and |

807 | \family typewriter |

808 | CONSTANT |

809 | \family default |

810 | definitions you create. |

811 | \end_layout |

812 | |

813 | \begin_layout LyX-Code |

814 | REQUIRE "atoms.a4l"; (* loads our atoms first *) |

815 | \end_layout |

816 | |

817 | \begin_layout LyX-Code |

818 | PROVIDE "myatoms.a4l"; (* registers your library *) |

819 | \end_layout |

820 | |

821 | \begin_layout LyX-Code |

822 | (* Custom atoms created by <insert your name here> *) |

823 | \end_layout |

824 | |

825 | \begin_layout Standard |

826 | If you develop an interesting set of atoms for some problem domain outside |

827 | chemical engineering thermodynamics, please consider mailing it to us through |

828 | our web page. |

829 | |

830 | \end_layout |

831 | |

832 | \begin_layout Standard |

833 | The user data directory |

834 | \family typewriter |

835 | ~/ |

836 | \begin_inset Index idx |

837 | status collapsed |

838 | |

839 | \begin_layout Plain Layout |

840 | ascdata |

841 | \end_layout |

842 | |

843 | \end_inset |

844 | |

845 | ascdata |

846 | \family default |

847 | may have a different name if you are running under Windows and do not have |

848 | the environment variable HOME |

849 | \begin_inset Index idx |

850 | status collapsed |

851 | |

852 | \begin_layout Plain Layout |

853 | HOME |

854 | \end_layout |

855 | |

856 | \end_inset |

857 | |

858 | defined. |

859 | It may be something like C: |

860 | \backslash |

861 | ascdata or |

862 | \backslash |

863 | WINNT |

864 | \backslash |

865 | Profiles |

866 | \backslash |

867 | Your Name |

868 | \backslash |

869 | ascdata. |

870 | When ASCEND is started, it prints out the name of this directory. |

871 | \end_layout |

872 | |

873 | \begin_layout Standard |

874 | When you write a |

875 | \family typewriter |

876 | MODEL |

877 | \family default |

878 | which depends on the definition of your new atoms, do not forget to add |

879 | the statement |

880 | \end_layout |

881 | |

882 | \begin_layout LyX-Code |

883 | REQUIRE "myatoms.a4l"; |

884 | \end_layout |

885 | |

886 | \begin_layout Standard |

887 | at the very top of your model file so that your atoms will be loaded before |

888 | your model definitions try to use them. |

889 | \end_layout |

890 | |

891 | \begin_layout Subsection |

892 | A new real variable for solver use |

893 | \end_layout |

894 | |

895 | \begin_layout Standard |

896 | Suppose you need an atom with units {dollar/ft^2/year} for some equation |

897 | relating amortized construction costs to building size. |

898 | Maybe this example is a bit far fetched, but it is a safe bet that our |

899 | library is not going to have an atom or a constant for these units. |

900 | Here is the standard incantation for defining a new variable type based |

901 | on |

902 | \family typewriter |

903 | solver_var |

904 | \family default |

905 | . |

906 | ASCEND allows a few permutations on this incantation, but they are of no |

907 | practical value. |

908 | The parts of this incantation that are in italics should be changed to |

909 | match your needs. |

910 | You can skip the comments, but you |

911 | \emph on |

912 | must |

913 | \emph default |

914 | include the units of the default on the bounds and nominal. |

915 | \end_layout |

916 | |

917 | \begin_layout LyX-Code |

918 | ATOM amortized_area_cost |

919 | \end_layout |

920 | |

921 | \begin_layout LyX-Code |

922 | REFINES solver_var DEFAULT 3.0 {dollar/ft^2/year}; |

923 | \end_layout |

924 | |

925 | \begin_layout LyX-Code |

926 | lower_bound := 0 {dollar/ft^2/year}; |

927 | \end_layout |

928 | |

929 | \begin_layout LyX-Code |

930 | (* minimum value *) |

931 | \end_layout |

932 | |

933 | \begin_layout LyX-Code |

934 | upper_bound := 10000 {dollar/ft^2/year}; |

935 | \end_layout |

936 | |

937 | \begin_layout LyX-Code |

938 | (* maximum value for any sane application *) |

939 | \end_layout |

940 | |

941 | \begin_layout LyX-Code |

942 | nominal := 10 {dollar/ft^2/year}; |

943 | \end_layout |

944 | |

945 | \begin_layout LyX-Code |

946 | (* expected size for all reasonable applications*) |

947 | \end_layout |

948 | |

949 | \begin_layout LyX-Code |

950 | END amortized_area_cost; |

951 | \end_layout |

952 | |

953 | \begin_layout Standard |

954 | In picking the name of your atom, remember that names should be as self-explanat |

955 | ory as possible. |

956 | Also avoid choosing a name that ends in _constant (as this is conventionally |

957 | applied only to CONSTANT |

958 | \begin_inset Index idx |

959 | status collapsed |

960 | |

961 | \begin_layout Plain Layout |

962 | CONSTANT |

963 | \end_layout |

964 | |

965 | \end_inset |

966 | |

967 | definitions) or _parameter. |

968 | Parameter is an extremely ambiguous and therefore useless word. |

969 | Also remember that the role a variable plays in solving a set of equations |

970 | depends on how the solver being applied interprets .fixed and other attributes |

971 | of the variable. |

972 | \end_layout |

973 | |

974 | \begin_layout Standard |

975 | \begin_inset Marginal |

976 | status collapsed |

977 | |

978 | \begin_layout Plain Layout |

979 | Exceptions |

980 | \end_layout |

981 | |

982 | \end_inset |

983 | |

984 | If an atom type matches all but one of the attributes you need for your |

985 | problem, say for example the |

986 | \family typewriter |

987 | upper_bound |

988 | \family default |

989 | is way too high, use the existing variable type and reassign the bound |

990 | to a more sensible value in the |

991 | \family typewriter |

992 | default_self |

993 | \family default |

994 | method of the model where the variable is created. |

995 | Having a dozen atoms defined for the same units gets confusing in short |

996 | order to anyone you might share your models with. |

997 | \end_layout |

998 | |

999 | \begin_layout Standard |

1000 | The exception to the exception (yes, there always seems to be one of those) |

1001 | is the case of a |

1002 | \family typewriter |

1003 | lower_bound |

1004 | \family default |

1005 | set at zero. |

1006 | Usually a |

1007 | \family typewriter |

1008 | lower_bound |

1009 | \family default |

1010 | of zero indicates that there is something inherently positive about variables |

1011 | of that type. |

1012 | Variables with a bound of this type should not have these physical bounds |

1013 | expanded in an application. |

1014 | Another example of this type of bound is the |

1015 | \family typewriter |

1016 | upper_bound |

1017 | \family default |

1018 | 1.0 on the type fraction. |

1019 | \end_layout |

1020 | |

1021 | \begin_layout Standard |

1022 | For example, negative temperature just is not sensible for most physical |

1023 | systems. |

1024 | ASCEND defines a temperature atom for use in equations involving the absolute |

1025 | temperature. |

1026 | On the other hand, a temperature difference, delta T, is frequently negative |

1027 | so a separate atom is defined. |

1028 | Anyone receiving a model written using the two types of atoms, which both |

1029 | have units of {Kelvin}, can easily tell which variables might legitimately |

1030 | take on negative values by noting whether the variable is defined as a |

1031 | temperature or a delta_temperature. |

1032 | \end_layout |

1033 | |

1034 | \begin_layout Subsection |

1035 | A new real constant |

1036 | \begin_inset Index idx |

1037 | status collapsed |

1038 | |

1039 | \begin_layout Plain Layout |

1040 | real constant |

1041 | \end_layout |

1042 | |

1043 | \end_inset |

1044 | |

1045 | |

1046 | \begin_inset Index idx |

1047 | status collapsed |

1048 | |

1049 | \begin_layout Plain Layout |

1050 | constant, real |

1051 | \end_layout |

1052 | |

1053 | \end_inset |

1054 | |

1055 | type |

1056 | \end_layout |

1057 | |

1058 | \begin_layout Standard |

1059 | Real constants which do not have a default value are usually needed only |

1060 | in libraries of reusable models, such as |

1061 | \family typewriter |

1062 | components.a4l |

1063 | \family default |

1064 | , where the values depend on the end-user's selection from alternatives |

1065 | in a database. |

1066 | The standard incantation to define a new real constant type is: |

1067 | \end_layout |

1068 | |

1069 | \begin_layout LyX-Code |

1070 | CONSTANT |

1071 | \shape italic |

1072 | critical_pressure_constant |

1073 | \end_layout |

1074 | |

1075 | \begin_layout LyX-Code |

1076 | REFINES real_constant DIMENSION |

1077 | \shape italic |

1078 | M/L/T^2 |

1079 | \shape default |

1080 | ; |

1081 | \end_layout |

1082 | |

1083 | \begin_layout Standard |

1084 | Here again, the italic parts of this incantation should be redefined for |

1085 | your purpose. |

1086 | \end_layout |

1087 | |

1088 | \begin_layout Standard |

1089 | \begin_inset Marginal |

1090 | status collapsed |

1091 | |

1092 | \begin_layout Plain Layout |

1093 | Universal exceptions and unit conversions |

1094 | \end_layout |

1095 | |

1096 | \end_inset |

1097 | |

1098 | It is wasteful to define a |

1099 | \family typewriter |

1100 | CONSTANT |

1101 | \family default |

1102 | type and a compiled object to represent a universal |

1103 | \begin_inset Index idx |

1104 | status collapsed |

1105 | |

1106 | \begin_layout Plain Layout |

1107 | universal constant |

1108 | \end_layout |

1109 | |

1110 | \end_inset |

1111 | |

1112 | |

1113 | \begin_inset Index idx |

1114 | status collapsed |

1115 | |

1116 | \begin_layout Plain Layout |

1117 | constant, universal |

1118 | \end_layout |

1119 | |

1120 | \end_inset |

1121 | |

1122 | constant. |

1123 | For example, the thermodynamic gas constant, R = 8.314... |

1124 | {J/mole/K}, is frequently needed in modeling chemical systems. |

1125 | The SI value of R does not vary with its application. |

1126 | Neither does the value of |

1127 | \begin_inset Index idx |

1128 | status collapsed |

1129 | |

1130 | \begin_layout Plain Layout |

1131 | pi |

1132 | \end_layout |

1133 | |

1134 | \end_inset |

1135 | |

1136 | |

1137 | \begin_inset Formula $\pi$ |

1138 | \end_inset |

1139 | |

1140 | . |

1141 | Numeric constants of this sort are better represented as a numeric coefficient |

1142 | and an appropriately defined unit conversion. |

1143 | Consider the |

1144 | \begin_inset Index idx |

1145 | status collapsed |

1146 | |

1147 | \begin_layout Plain Layout |

1148 | ideal gas law |

1149 | \end_layout |

1150 | |

1151 | \end_inset |

1152 | |

1153 | ideal gas law, PV = NRT and the ASCEND unit conversion {GAS_C} which appears |

1154 | in the library ascend4/models/measures.a4l. |

1155 | This equation should be written: |

1156 | \end_layout |

1157 | |

1158 | \begin_layout LyX-Code |

1159 | P * V = n * 1.0{GAS_C} * T; |

1160 | \end_layout |

1161 | |

1162 | \begin_layout Standard |

1163 | Similarly, area = pi*r^2 should be written |

1164 | \end_layout |

1165 | |

1166 | \begin_layout LyX-Code |

1167 | area = 1{PI} * r^2; |

1168 | \end_layout |

1169 | |

1170 | \begin_layout Standard |

1171 | The coefficient 1 of |

1172 | \family typewriter |

1173 | {GAS_C} |

1174 | \family default |

1175 | and {PI} in these equations takes of the dimensionality of and is multiplied |

1176 | by the conversion factor implied by the |

1177 | \family typewriter |

1178 | UNITS |

1179 | \family default |

1180 | definition for the units. |

1181 | If we check |

1182 | \family typewriter |

1183 | measures.a4l |

1184 | \family default |

1185 | , we find the definition of PI is simply {3.14159...} and the definition of |

1186 | |

1187 | \family typewriter |

1188 | GAS_C |

1189 | \family default |

1190 | is {8.314... |

1191 | J/mole/K} as we ought to expect. |

1192 | \end_layout |

1193 | |

1194 | \begin_layout Standard |

1195 | For historical reasons there are a few universal constant definitions in |

1196 | |

1197 | \family typewriter |

1198 | atoms.a4l |

1199 | \family default |

1200 | . |

1201 | New modelers should not use them; they are only provided to support outdated |

1202 | models that no one has yet taken the time to update. |

1203 | \end_layout |

1204 | |

1205 | \begin_layout Subsection |

1206 | New types for integers, symbols, and booleans |

1207 | \end_layout |

1208 | |

1209 | \begin_layout Standard |

1210 | The syntax for |

1211 | \family typewriter |

1212 | ATOM |

1213 | \family default |

1214 | and |

1215 | \family typewriter |

1216 | CONSTANT |

1217 | \family default |

1218 | definitions of the non-real types is the same as for real number types, |

1219 | except that units are not involved. |

1220 | Take your best guess based on the examples above, and you will get it right. |

1221 | If even that is too hard, more details are given in **syntax.fm5**. |

1222 | \end_layout |

1223 | |

1224 | \begin_layout Section |

1225 | How to define a |

1226 | \begin_inset Index idx |

1227 | status collapsed |

1228 | |

1229 | \begin_layout Plain Layout |

1230 | scaling |

1231 | \end_layout |

1232 | |

1233 | \end_inset |

1234 | |

1235 | scaling variable |

1236 | \end_layout |

1237 | |

1238 | \begin_layout Standard |

1239 | A scaling variable |

1240 | \family typewriter |

1241 | ATOM |

1242 | \family default |

1243 | is defined with a name that ends in _scale as follows. |

1244 | Note that this |

1245 | \family typewriter |

1246 | ATOM |

1247 | \family default |

1248 | does not refine |

1249 | \family typewriter |

1250 | solver_var |

1251 | \family default |

1252 | , so solvers will not try to change variables of this type during the solution |

1253 | process. |

1254 | \end_layout |

1255 | |

1256 | \begin_layout LyX-Code |

1257 | ATOM distance_scale REFINES real DEFAULT 1.0{meter}; |

1258 | \end_layout |

1259 | |

1260 | \begin_layout LyX-Code |

1261 | END distance_scale; |

1262 | \end_layout |

1263 | |

1264 | \begin_layout Standard |

1265 | \begin_inset Marginal |

1266 | status collapsed |

1267 | |

1268 | \begin_layout Plain Layout |

1269 | ASCEND cannot do it all for you |

1270 | \end_layout |

1271 | |

1272 | \end_inset |

1273 | |

1274 | ASCEND uses a combination of symbolic and numerical techniques to create |

1275 | and solve mathematical problems. |

1276 | Once you get the problem close to the solution, ASCEND can internally compute |

1277 | its own scaling values for relations, known elsewhere as "relation nominals |

1278 | \begin_inset Index idx |

1279 | status collapsed |

1280 | |

1281 | \begin_layout Plain Layout |

1282 | nominals |

1283 | \end_layout |

1284 | |

1285 | \end_inset |

1286 | |

1287 | , |

1288 | \begin_inset Quotes erd |

1289 | \end_inset |

1290 | |

1291 | assuming you have set good values for the .nominal attribute of all the |

1292 | variables. |

1293 | It does this by computing the largest additive term in each equation. |

1294 | The absolute value of this term is a very good scaling value. |

1295 | \end_layout |

1296 | |

1297 | \begin_layout Standard |

1298 | This internal scaling works quite well, but not when the problem is very |

1299 | far away from the solution so that the largest additive terms computed |

1300 | are not at all representative of the physical situation being modeled. |

1301 | The |

1302 | \family typewriter |

1303 | scale_self |

1304 | \family default |

1305 | |

1306 | \begin_inset Index idx |

1307 | status collapsed |

1308 | |

1309 | \begin_layout Plain Layout |

1310 | scale |

1311 | \begin_inset ERT |

1312 | status collapsed |

1313 | |

1314 | \begin_layout Plain Layout |

1315 | |

1316 | |

1317 | \backslash |

1318 | _ |

1319 | \end_layout |

1320 | |

1321 | \end_inset |

1322 | |

1323 | self |

1324 | \end_layout |

1325 | |

1326 | \end_inset |

1327 | |

1328 | method, which should be written for every model as described in Section |

1329 | \begin_inset space ~ |

1330 | \end_inset |

1331 | |

1332 | |

1333 | \begin_inset CommandInset ref |

1334 | LatexCommand ref |

1335 | reference "sssec:methods.scaleself" |

1336 | |

1337 | \end_inset |

1338 | |

1339 | of Chapter |

1340 | \noun off |

1341 | |

1342 | \begin_inset space ~ |

1343 | \end_inset |

1344 | |

1345 | |

1346 | \begin_inset CommandInset ref |

1347 | LatexCommand vref |

1348 | reference "cha:methods" |

1349 | |

1350 | \end_inset |

1351 | |

1352 | should set the equation scaling values you have defined in a |

1353 | \family typewriter |

1354 | \noun default |

1355 | MODEL |

1356 | \family default |

1357 | \noun off |

1358 | based on the best available information. |

1359 | In a chemical engineering flowsheeting problem, for example, information |

1360 | about a key process material flow should be propagated throughout the process |

1361 | flowsheet to scale all the other flows, material balance equations, and |

1362 | energy balance equations. |

1363 | \end_layout |

1364 | |

1365 | \begin_layout Standard |

1366 | \begin_inset Marginal |

1367 | status collapsed |

1368 | |

1369 | \begin_layout Plain Layout |

1370 | Scaling atom default value |

1371 | \end_layout |

1372 | |

1373 | \end_inset |

1374 | |

1375 | The |

1376 | \begin_inset Index idx |

1377 | status collapsed |

1378 | |

1379 | \begin_layout Plain Layout |

1380 | default value |

1381 | \end_layout |

1382 | |

1383 | \end_inset |

1384 | |

1385 | default value for any scaling atom should always be 1.0 in appropriate SI |

1386 | units, so that the scaling will have no effect until you assign a problem |

1387 | specific value. |

1388 | Multiplying or dividing both sides of an equation by 1.0 obviously will |

1389 | not change the mathematical behavior, but you do not want to change the |

1390 | behavior arbitrarily either-- you want to change it based on problem informatio |

1391 | n that is not contained in your |

1392 | \family typewriter |

1393 | myatoms.a4l |

1394 | \family default |

1395 | file. |

1396 | \end_layout |

1397 | |

1398 | \end_body |

1399 | \end_document |

john.pye@anu.edu.au | ViewVC Help |

Powered by ViewVC 1.1.22 |