1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
|
BEGIN NEW DATA CASE
C BENCHMARK DCNEW-19
C 18 February 1997, two new features enter the UTPF. These will be verified
C by the following data. See April newsletter for details about: 1) Walter
C Powell's analytical type-10 source; 2) $PARAMETER for both simple string
C substitution and also mathematics at data-input time (Walter Powell pocket
C calculator). The Type-10 function can be put in cols. 11-60 if it fits, or
C can be continued onto cols. 11-40 of the following card ordered by CONT. in
C columns 61-61 of the first. T-start and T-stop are always from ending card
C August of 1998: replace Walter Powell's pocket calculator by one written
C in Vancouver, USA. Story is scheduled for the October newsletter.
$PARAMETER START ONLY { This block of 3 cards is used only before any $INCLUDE
FIVEK= '5.E+3' { Within apostrophe ==> there is no math, just string replacement
BLANK card ends $PARAMETER definitions
1.0 21.
1 1
$PARAMETER { This will be serviced by CIMAGE just as any other $-card would be
C ONEOHM = 0.5 * ( 1.0 + "DELTAT" ) { Within quotes ==> value of this ATP variable
ONEOHM = 0.5 * ( 1.0 + DELTAT ) { Beginning 28 Nov 98, quotes are no longer needed
C OMEGA = "TWOPI" * .05 --- original frequency, equal to that of Type-14 COS
C OMEGA_ = "TWOPI" * 0.1 { Speed the modulation of the ramp for visual effect
OMEGA_ = TWOPI * 0.1 { Beginning 28 November 98, quotes no longer are necessary
C ANGLE_ = .25 * "TWOPI"
ANGLE_ = .25 * TWOPI { Beginning 28 November 98, quotes no longer are necessary
BLANK card ends $PARAMETER definitions that are processed just b4 branch cards
COS ONEOHM 1
SIN ONEOHM 1
SIN2 1.0
SIN3 1.0
A1 A2 5.E+3 1
A2 FIVEK
BLANK card ends branch cards
BLANK card ends switch cards (none, for this case)
14COS 1.0 .05 0.0
C 14SIN 3.0 .05 -90. ---- old form of following card:
C 10SIN 3.0 * COS ( OMEGA * TIMEX - ANGLE ) { Walter Powell analytical source
10SIN .1 * TIMEX + .8 * COS ( OMEGA_ * TIMEX - ANGLE_ ) { Walter Powell analytical source
10SIN2 .1 * TIMEX + .8 * COS ( OMEGA_ * TIMEX - ANGLE_ ) CONT. { Note 61-65
+ 0.2 { continuation carries T-start, T-stop in 61-80 } 1.5 18.5
C Note the preceding SIN2 repeats SIN but with extra vertical offset of 0.2
C on a continuation card. Also, SIN2 uses T-start (61-70) & T-stop (71-80)
10SIN3 IF( TIMEX .LE. 15. ) THEN { If simulation time < 16 sec:
SIN3 = TIMEX * 0.10 { Linear ramp up with slope matching SIN
ELSE { Alternatively (if 16 or more seconds):
SIN3 = ( 23.5 - TIMEX ) * .20 { Linear ramp down, double the slope up
ENDIF { Terminate 5-line block of Type-10 source
C Note the preceding SIN3 creates a saw tooth with the peak broken off to
C create a flat top. The value at 16 is equal to the value at 15. Note that
C the name of the bus in columns 3-8 of the Type-10 source card is repeated
C within the IF-block (left of equal signs). Control words IF( and ELSE
C and ENDIF must begin in column 10 exactly as illustrated. As added on
C 11 December 2000, ELSEIF( also should be legal, but is not being
C illustrated in this data.
14A1 620000. .06 -50.
BLANK card ends source cards
SIN3 SIN SIN2 COS A2
C First 5 output variables are electric-network voltage differences (upper voltage minus lower voltage);
C Next 3 output variables are branch currents (flowing from the upper node to the lower node);
C Step Time SIN3 SIN SIN2 COS A2 COS SIN A1
C TERRA TERRA A2
C 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
C 1 1.0 0.1 .570084377 0.0 .951056516 272691.058 .951056516 .570084377 54.5382115
C 2 2.0 0.2 .960785678 1.16078568 .809016994 307819.308 .809016994 .960785678 61.5638615
C 3 3.0 0.3 1.06090928 1.26090928 .587785252 299715.25 .587785252 1.06090928 59.9430501
C 4 4.0 0.4 .870407977 1.07040798 .309016994 249517.077 .309016994 .870407977 49.9034154
C 5 5.0 0.5 .500237061 .700237061 .6123E-16 164274.972 .6123E-16 .500237061 32.8549944
C 6 6.0 0.6 .129975602 .329975602 -.30901699 55960.935 -.30901699 .129975602 11.192187
C 7 7.0 0.7 -.06076275 .139237247 -.58778525 -60212.649 -.58778525 -.06076275 -12.04253
C 8 8.0 0.8 .039067835 .239067835 -.80901699 -167929.55 -.80901699 .039067835 -33.585909
C 9 9.0 0.9 .42953207 .62953207 -.95105652 -252061.24 -.95105652 .42953207 -50.412247
BLANK card ends requests for program outputs (here, just node voltages)
C 10 10. 1.0 .999688816 1.19968882 -1. -300791.68 -1. .999688816 -60.158335
C 11 11. 1.1 1.56996442 1.76996442 -.95105652 -307276.82 -.95105652 1.56996442 -61.455363
C 12 12. 1.2 1.96073982 2.16073982 -.80901699 -270605.84 -.80901699 1.96073982 -54.121169
C 13 13. 1.3 2.06095504 2.26095504 -.58778525 -195929.08 -.58778525 2.06095504 -39.185817
C 14 14. 1.4 1.87052788 2.07052788 -.30901699 -93734.666 -.30901699 1.87052788 -18.746933
C 15 15. 1.5 1.50038531 1.70038531 -.1837E-15 21624.5069 -.1837E-15 1.50038531 4.32490137
C 16 16. 1.5 1.13009557 1.33009557 .309016994 133946.582 .309016994 1.13009557 26.7893164
C 17 17. 1.3 .939283118 1.13928312 .587785252 227456.258 .587785252 .939283118 45.4912516
C 18 18. 1.1 1.03902209 1.23902209 .809016994 289020.378 .809016994 1.03902209 57.8040757
C 19 19. 0.9 1.42941218 0.0 .951056516 309992.446 .951056516 1.42941218 61.9984891
C 20 20. 0.7 1.99954057 0.0 1.0 287426.995 1.0 1.99954057 57.485399
C 21 21. 0.5 2.56984444 0.0 .951056516 224493.277 .951056516 2.56984444 44.8986554
CALCOMP PLOT
143 2. 0.0 20. -1. 3.0 COS SIN SIN2 SIN3
BLANK card ending plot cards
BEGIN NEW DATA CASE
C BENCHMARK DCNEW-19
C 2nd of 6 subcases is related to preceding. Analytical function is too
C long, spilling over into T-start of columns 61-70. Demonstrate special
C handling to reject such data in civilized fashion. 28 October 1998
1.0 21.
1 1
C 19 March 2009, WSM adds 2 unrelated symbol definitions HANSOK and HANSBAD.
C But first, add a request to prohibit optimization by the pocket calculator.
C Addition here is mandatory until an error in optimization of the compilation
C is corrected. The troubled data are formulas for HANSOK and HANSBAD as
C first reported by Prof. Hans Kr. Hoidalen in Trondheim, Norway. Without the
C change making NOOPT = 1, execution would end on the HANSBAD input card with
C an extraneous complaint about TACS (not being used). With use of NOOPT = 1,
C the computation proceeds normally. Although this is not HFS data, the loop
C counter should have default value KNT = 1 so the right hand side correctly
C evaluates to 10**1 = 10. Execution still will end prematurely with that
C complaint about too long an analytical function for SIN, but at least Prof.
C Hoidalen's data is handled correctly. WSM.
C $PARAMETER NOOPT=1 { Set optimization of pocket calculator compilation to none
C Comment out preceding line 1 October 2011 after correction was made to the
C code that handles TEMPx variables within POCKET.SPL and nowhere else.
$PARAMETER { This will be serviced by CIMAGE just as any other $-card would be
OMEGA_ = "TWOPI" * 0.1 { Speed the modulation of the ramp for visual effect
ANGLE_ = .25 * "TWOPI"
C Note about preceding quotation marks on 24 December 2000. Whereas the first
C subcase demonstrated removal long ago, this use is retained in its original,
C inefficient form as a demonstration of a new property. With the introduction
C of non-volatile variables, the quoted TWOPI continues to work as expected,
C but it now demonstrates a new power. The way MATDAT handle quotes, they are
C erased, and the line is preceded by a temporary definition TWOPI = 6.2832 ...
C which is taken as a SPY symbol (a variable in COMMON, recognized by SPY). In
C fact the answer is correct, but COMMON is being modified without the user's
C knowledge or intention. Old inefficiency (requiring a intermediate variable)
C suddenly has been increased by unnecessary redefinition of a COMMON variable.
HANSOK =10.**((KNT-1.)/20.+1.) { works. 1st of 2 formulas from HKH
HANSBAD =10.**((KNT-1.)*0.05+1.) { fails 2nd of 2 formulas from HKH
BLANK card ends $PARAMETER definitions that are processed just b4 branch cards
COS 1.0 1
SIN 1.0 1
BLANK card ends branch cards
C 2 April 2009, WSM adds unrelated IF-THEN block that includes an intermediate
C variable only. Trouble using IF without a permanent variable was reported by
C Prof. Hans Kr. Hoidalen in Trondheim, Norway. Although this is not HFS data,
C the loop counter should have default value KNT = 1 making the IF-THEN block
C legal. Add a dummy switch card to illustrate use of the permanent variable
C CAP___ which depends on intermediate variable CAPI. Execution still will end
C prematurely with that complaint about too long an analytical function for the
C variable SIN, but at least Prof. Hoidalen's IF-THEN will be handled properly.
C Note about the following IF(. The use of "equals one"
C is arbitrary. Changing .EQ. to .NE. will force control
C through the ELSE alternative, resulting in CAPI = 5.0 rather
C than 2.3, and as a result, CAP___ = 10 (see next line) :
C Parameter 1 defined. Value = 1.000000E+01 |CAP___ = 2.0 * CAPI
$PARAMETER { This will be serviced by CIMAGE just as any other $-card would be
IF( KNT .EQ. 1.0 ) THEN { This is equivalent (THEN on right is not required)
CAPI = 2.3 $$ { The double dollar sign flags an intermediate variable, note
ELSE { Alternatively (if not the first pass, so for KNT = 2 onward):
CAPI = 5. $$ { The double dollar sign flags an intermediate variable, note
ENDIF { Terminate 5-line block that defines intermediate symbol CAPI
CAP___ = 2.0 * CAPI { Define A6 permanent variable to be used in later data
BLANK card ending $PARAMETER block
C Note about multiple intermediate variables within the IF-THEN block:
C the logic probably would fail. As now constituted, one intermediate
C variable is the limit within an IF-THEN block. But more than one IF-THEN
C block is possible. To illustrate, let the desired second intermediate
C variable CAPJ be defined within its own IF-THEN block as follows. Also
C for variety, we will change ".EQ. 1.0" to ".NE. 1.0" to force the use
C of the ELSE alternative:
$PARAMETER { Separate $PARAM block ==> correct interpret line count within block
C Added explanation of preceding line. Without it and preceding BLANK line,
C the answer would be correct except for line # of interpretation, which would
C not return to value 1 for the IF( statement. Restarting this at 1 is clearer
C is clearer for the user who looks closely at such details. Numbering of the
C interpretation then will be 1, 3, 4, and 5 instead of 3, 5, 6, and 7.
IF( KNT .NE. 1.0 )
CAPJ = ( KNT + 0.5 ) ** 2 $$ { For KNT equal to 1, this gives CAPJ = 2.25
ELSE { Alternatively (if not the first pass, so for KNT = 2 onward):
CAPJ = ( KNT - 0.5 ) ** 2 $$ { If KNT were equal to 1, this would give 0.25
ENDIF { Terminate 7-line block that defines symbols CAPI and CAPJ
IND___ = CAPJ / 2.0 { Inductance in cols. 33-38 of following series R-L-C
BLANK card ending $PARAMETER block
C The following meaningless switch illustrates use of CAP___ & IND___ variables
COS SIN CAP___ IND___
BLANK card ends switch cards
14COS 4.0 .05 0.0
C Ruler for T-start in 61:70: 1234567890
10SIN 0.1 * TIMEX + 0.8 * COS ( OMEGA_ * TIMEX - ANGLE_ ) { Too long function
BLANK card ends source cards
SIN SIN2 COS A2
BLANK card ends requests for program outputs (here, just node voltages)
BLANK card ending plot cards
BEGIN NEW DATA CASE
C 3rd of 6 subcases illustrates Type-10 sources only. dT-loop output will be
C identical to that produced by famous TACS and MODELS simulations (learning
C how slow code from Laurent Dube really is). With extension to 100K steps
C and proper control of output, this becomes MATHTY10 as first used to
C time operation of POCKET (WSM's new pocket calculator).
C That might have been 1998. Twelve years later, the inefficiency of MODELS
C is widely known. So distorting the data a little is permissible. Addition
C of the GAUSS function to both TACS and the pocket calculator will require
C verification. DC-18 does the work for TACS. Here, on 10 October 2010,
C we add such disconnected, unrelated output to the pocket calculator. WSM.
PRINTED NUMBER WIDTH, 10, 2, { Request maximum precision (for 8 output columns)
.02 2.0
1 1 0 0 1 -1
5 5
TEST1 1.0
TEST2 1.0
TEST3 1.0
TEST5 1.0
TEST6 1.0
TWO? 1.0
NORMAL 1.0 { A Gaussian random # will be applied to this
BLANK card ends branch cards
BLANK card ends switch cards (none, for this case)
10TEST1 10.0 * ( 1.0 + TIMEX ) ** 2 + 50.
10TEST2 1.E2 * COS ( 2.0 * 3.14159 * TEST1 / 100. )
10TEST3 10.0 + 5.5 * TIMEX * SQRT ( ABS ( TEST2 ) )
10TEST5 2.0 * 3.14159 * TEST1 / 100.
10TEST6 2.0 * SIN ( TEST5 )
C 10TWO? 2.E-4 * ( TEST2 ** 2 + 2500. * TEST6 ** 2 )
10TWO? 2.000E-4 * ( TEST2 ** 2 + CONT.
2500. * { Remember that T-start and T-stop are on right of this card
1 TEST6 ** 2 ) { Illustrate conventional continuation line (1 in column
C 6 preceded by 5 blanks). With or without CONT., any
C number of continuation cards can follow the original 1
C or two (two if CONT. is used). This is like FORTRAN.
10NORMAL GAUSS ( 0.0 ) { Random function has zero mean and stand. deviation 1
BLANK card ending all sources
TEST1 TEST2 TEST3 TEST5 TEST6 TWO? NORMAL
C Step Time TEST1 TEST2 TEST3 TEST5 TEST6 TWO? NORMAL
C 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
C 1 .02 60.404 -79.384 10.98007 3.795292 -1.21625 2.0 -.26382
C 2 .04 60.816 -77.7833 11.94029 3.821179 -1.25694 2.0 .6641848
C 3 .06 61.236 -76.0979 12.87873 3.847568 -1.29755 2.0 -.384642
BLANK card ending node voltage outputs
C 90 1.8 128.4 -21.2 55.58307 8.067603 1.954539 2.0 1.195179
C 95 1.9 134.1 -54.1115 86.87076 8.425744 1.681897 2.0 .146522
C 100 2.0 140. -80.9013 108.9396 8.796452 1.175583 2.0 .9643848
C Variable maxima : 140. 99.99389 108.9396 8.796452 1.999977 2.0 3.103447
C Times of maxima : 2.0 1.24 2.0 2.0 1.74 .04 1.68
C Variable minima : 0.0 -80.9013 0.0 0.0 -1.99999 0.0 -2.77845
C Times of minima : 0.0 2.0 0.0 0.0 .58 0.0 .82
CALCOMP PLOT
143 .2 0.0 2.0 TEST1 TEST2 TEST3
143 .2 0.0 2.0 TEST5 TEST6 TWO?
BLANK card ending plot cards
BEGIN NEW DATA CASE
C 4th of 6 subcases documents pocket calculator applied to many different
C expressions. Use Type-10 sources, and take just 1 time step. Prior to
C 16 November 2000, this was separate disk file POCKET.DAT Following
C diagnostic line should be activated to see all assembler (precedes "EOF").
C For philosophy of this data, see the April, 2001, newsletter.
C DIAGNOSTIC 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 9 9 9 9 9
C The following illustrates the ability to change dimensions (offset
C subscripts for VOLTI storage) of the pocket calculator. Prior to
C 12 November 2000, dimensions were 10 and 20, so the following example
C shows what resulted: an error stop do to inadequate INDOFF. That was
C prior to expansion of the default values of 60 and 120, which handle
C the present data subcase without difficulty.
C $PARAMETER INDOFF=10 KONST=20 { Fixed limits prior to improvement 12 Nov 00
C Halt in POCKET. Overflow JTOKEN into INDOFF. INDOFF, KCONST = 10 36
C Temporary error stop in ENTRY STOPTP of "WINDOW". NCHAIN, LASTOV = 5 4
C $PARAMETER INDOFF=60 KONST=120 { Do-nothing reassignment of default values
$PARAMETER INDOFF=90 KONST=180 { Do-nothing reassignment of default values
C Overhaul of storage for pocket calculator requires more List 4 space than
C previously. Add NEW LIST SIZES on 6 August 2010. List 4 = 140 fails :
NEW LIST SIZES { Request for a change to program table sizes (VARDIM input)
DEFAULT 3.0 { Any blank field will be converted to 3 times default value
0 0 0 240 { List 4 < 840 of LISTSIZE.BPA is adequate
BLANK card for lists 11-20.
BLANK card for lists 21-30.
390 300 { Optional card for Lists 31, etc. --- as LISTSIZE.BPA
240000 742 { Offsets for supporting programs (non-simulation overlays)
PRINTED NUMBER WIDTH, 11, 1, { Request maximum precision (for 8 output columns)
.001 .001
1 -11 0 0
C Each analytical function will define a Type-10 source. In turn, this
C must be connected to a node of the electric network. So, for each,
C connect a 1-ohm resistor to ground:
C 1st set of 10 variables ANG* is for 1st row of 132-column output vector:
ANG1 1.0
ANG2 1.0
ANG3 1.0
ANG4 1.0
ANG5 1.0
ANG6 1.0
ANG7 1.0
ANG8 1.0
ANG9 1.0
ANG10 1.0
C Next set of 10 variables BAL* is for 2nd row of 132-column output vector:
CC 1.0
DD 1.0
THETA 1.0
OMEGA 1.0
BAL1 1.0
BAL2 1.0
BAL3 1.0
BAL4 1.0
BAL5 1.0
BAL6 1.0
BAL7 1.0
BAL8 1.0
BAL9 1.0
BAL10 1.0
C Next set of 10 variables CAT* is for 3rd row of 132-column output vector:
UNITY 1.0
ZERO 1.0
CAT1 1.0
CAT2 1.0
CAT3 1.0
CAT4 1.0
CAT5 1.0
CAT6 1.0
CAT7 1.0
CAT8 1.0
CAT9 1.0
CAT10 1.0
C Next set of 10 variables DUM* is for 4th row of 132-column output vector:
DUM1 1.0
DUM2 1.0
DUM3 1.0
DUM4 1.0
DUM5 1.0
DUM6 1.0
DUM7 1.0
DUM8 1.0
DUM9 1.0
DUM10 1.0
C Next set of 10 variables EAT* is for 5th row of 132-column output vector:
EAT1 1.0
EAT2 1.0
EAT3 1.0
EAT4 1.0
EAT5 1.0
EAT6 1.0
EAT7 1.0
EAT8 1.0
EAT9 1.0
EAT10 1.0
C Next set of 10 variables FAT* is for 6th row of 132-column output vector:
FAT1 1.0
FAT2 1.0
FAT3 1.0
FAT4 1.0
FAT5 1.0
FAT6 1.0
FAT7 1.0
FAT8 1.0
FAT9 1.0
FAT10 1.0
C Next set of 10 variables GAS* is for 7th row of 132-column output vector:
GAS1 1.0
GAS2 1.0
GAS3 1.0
GAS4 1.0
GAS5 1.0
GAS6 1.0
GAS7 1.0
GAS8 1.0
GAS9 1.0
GAS10 1.0
BLANK card ends branch cards
BLANK card ends switch cards (none, for this case)
C 1st set of 10 variables ANG* is for 1st row of 132-column output vector:
10ANG1 1.0
10ANG2 -1.0
10ANG3 ANG1
10ANG4 +ANG1
10ANG5 COS ( 1.0 )
10ANG6 SIN ( ANG3 )
10ANG7 SIN ( -ANG3 )
10ANG8 - SIN ( - ANG3 )
10ANG9 - ANG3 * ANG6
10ANG10 - SIN ( ANG3 )
C Next set of 10 variables BAL* is for 2nd row of 132-column output vector:
10CC 3.14159
10DD 2.71828
10THETA CC
10OMEGA DD
10BAL1 ( -CC + DD ) / ( -CC - DD )
10BAL2 ( -CC - DD ) / 3.1415
10BAL3 ( -CC + DD ) / ( CC - DD )
10BAL4 -( -CC + DD ) / ( CC - DD )
10BAL5 THETA * OMEGA
10BAL6 THETA + OMEGA
10BAL7 THETA - OMEGA
10BAL8 THETA / OMEGA
10BAL9 THETA + OMEGA + ANG5
10BAL10 THETA + OMEGA + ANG5 - TIMEX
C Next set of 10 variables CAT* is for 3rd row of 132-column output vector:
10UNITY 1.0
10ZERO 0.0 { In addition to these, remember CC = 3.14159 and DD = 2.71828
10CAT1 CC .EQ. DD { This is false, so CAT1 = 0.0
10CAT2 CC .NE. DD { This is true, so CAT2 = 1.0
10CAT3 CC .GT. DD { This is true, so CAT3 = 1.0
10CAT4 CC .LT. DD { This is false, so CAT4 = 0.0
10CAT5 CC .GE. DD { This is true, so CAT5 = 1.0
10CAT6 CC .LE. DD { This is false, so CAT6 = 0.0
10CAT7 .NOT. UNITY { UNITY is true, so toggle it to false: CAT7 = 0.0
10CAT8 UNITY .OR. ZERO { CAT8 = 1 since UNITY is true, & OR with anything is true
10CAT9 UNITY .AND. ZERO { CAT9 = 0 since ZERO is false, & AND with anything is false
10CAT10 UNITY .NOR. ZERO { CAT10 = 0 since OR first, then negate, so toggle CAT8
C 4th set of 10 variables DUM* is for 4th row of 132-column output vector:
10DUM1 UNITY .NAND. ZERO { DUM1 = 1 since AND first, then negate, so toggle CAT9
10DUM2 THETA / OMEGA + DD { DUM2 = 3.87400715 = 3.1416 / 2.718 + 2.718
10DUM3 THETA / OMEGA - DD { DUM3 = -1.562 = 3.1416 / 2.718 - 2.718
10DUM4 CC**DD { DUM4 = 22.459 = 3.1416 ** 2.718
10DUM5 50.0 + CC**DD { DUM5 = 72.459 = DUM4 + 50
10DUM6 TRUNC ( CC ) + INVRS ( CC ) { DUM6 = 3.318 = 3 (integer in 3.14) + 1 / 3.14
10DUM7 DEG ( CC ) { DUM7 = 180 (close) = 3.1416 converted to degrees
10DUM8 RAD ( DUM7 ) { DUM8 = 3.1416 = DUM7 deg converted back to radians
10DUM9 SIGN ( -CC ) - 3.0 { DUM9 = -4 = -1 - 3 = sign of ( -3.14 ) - 3
10DUM10 MINUS ( CC ) { DUM10 = -3.1416 = minus sign applied to Pi
C 5th set of 10 variables EAT* is for 5th row of 132-column output vector:
10EAT1 SEQ6 ( DUM4 ) { EAT1 = 4 since DUM4 = 22.4590591 / 6 ==> 4.459 remainder
10EAT2 - LOG ( DD ) { EAT2 = -1 (close) since DD = 2.71828 is close to e
10EAT3 LOG10 ( 200. ) { EAT3 = 2.3010 since log(10) of 2 = .3010
10EAT4 ATAN ( UNITY ) { EAT4 = .785398 = atan ( 1.0 ) = pi / 4 = 3.1416 / 4
10EAT5 EXP ( 2.0 * UNITY ) { EAT5 = 7.389 = 2.71828 ** 2
10EAT6 ASIN ( -ONEHAF ) { EAT6 = -.5236 = -30 degrees / 57.29578
10EAT7 ACOS ( ONEHAF ) { EAT7 = 1.0471 = 60 degrees / 57.29578
10EAT8 RAN ( ZERO ) { EAT8 = .813467631 (arg = 0 ==> next random #)
10EAT9 TANH ( UNITY ) { EAT9 = .761594156
10EAT10 SINH ( UNITY ) / COSH ( UNITY ) { EAT10 = EAT9 by trig definition
C 6th set of 10 variables FAT* is for 6th row of 132-column output vector:
10FAT1 TAN ( CC / 6.0 ) { FAT1 = .5773 since arg CC / 6 = Pi/6 = 30 degrees
10FAT2 2.0 * COTAN ( 60. / 57.29578 ) { FAT2 = 1.1547 = 2 * FAT1
10FAT3 1.0 / ABS ( UNITY * CC * DD ) { FAT3 = .1171 = 1 / ( 3.14 * 2.718 )
10FAT4 - SQRT ( 2.0 ) * 0.5 { FAT4 = -.707 = sqrt ( 2 ) * 1/2
10FAT5 - 2.0 ** 2 + UNITY { FAT5 = -3 = -4 + 1
10FAT6 (-2.0) ** 2 + UNITY { FAT6 = 5 = 4 + 1
10FAT7 - EXP ( UNITY * CC / DD ) - 0.1 { FAT7 = -3.276 = -EXP ( 3.14 / 2.718 ) - 0.1
10FAT8 ( UNITY / DD * CC ) * 2.0 - UNITY { FAT8 = 1.311 = ( 3.1416 / 2.718 ) * 2 - 1
10FAT9 UNITY - ( UNITY * DD + CC ) { FAT9 = -4.860 = 1 - ( 3.14 + 2.718 )
10FAT10 UNITY * DD - CC { FAT10 = -.4233 = 2.718 - 3.14 = 1 * 2.718 - 3.1416
C 7th set of 10 variables GAS* is for 7th row of 132-column output vector:
10GAS1 UNITY * ( CC / DD / UNITY ) { GAS1 = 1.156 = 3.14 / 2.718 = Pi / e / 1
10GAS2 CC ** 2 + DD ** 2 { GAS2 = 17.26 = 3.14 ** 2 + 2.718 ** 2
10GAS3 CC ** 2 - DD ** 2 { GAS3 = 2.48 = 3.14 ** 2 - 2.718 ** 2
C 3 December 2001, add variables to confirm correction of the error
C first reported by Orlando Hevia using data EXP.DAT Note GAS4
C through GAS9 all have same value EXP(-T) = 1 / EXP(.001) = .999
10GAS4 1.0 / EXP ( TIMEX ) { This establishes the right answer (no bug here)
10GAS5 EXP(-(TIMEX*1.0)) { Hevia showed that this, too, always was correct
10GAS6 EXP ( -TIMEX ) { Hevia showed that this, too, always was correct
10GAS7 EXP( -TIMEX * 1.0 ) { Prior to correction on 3 December, error stop
10GAS8 EXP( -TIMEX / 1.0 ) { Prior to correction on 3 December, error stop
10GAS9 EXP( -TIMEX * UNITY ) { Prior to correction on 3 December, error stop
10GAS10 28.0 - 25.0 - ( TIMEX - 1.0 ) { Verify correction on 9 January 2002
BLANK card ending all sources
ANG1 ANG2 ANG3 ANG4 ANG5 ANG6 ANG7 ANG8 ANG9 ANG10
BAL1 BAL2 BAL3 BAL4 BAL5 BAL6 BAL7 BAL8 BAL9 BAL10
CAT1 CAT2 CAT3 CAT4 CAT5 CAT6 CAT7 CAT8 CAT9 CAT10
DUM1 DUM2 DUM3 DUM4 DUM5 DUM6 DUM7 DUM8 DUM9 DUM10
EAT1 EAT2 EAT3 EAT4 EAT5 EAT6 EAT7 EAT8 EAT9 EAT10
FAT1 FAT2 FAT3 FAT4 FAT5 FAT6 FAT7 FAT8 FAT9 FAT10
GAS1 GAS2 GAS3 GAS4 GAS5 GAS6 GAS7 GAS8 GAS9 GAS10
C Step Time ANG1 ANG2 ANG3 ANG4 ANG5 ANG6 ANG7 ANG8 ANG9 ANG10
C 1 .1E-2 1.0 -1. 1.0 1.0 .540302306 .841470985 -.84147098 .841470985 -.84147098 -.84147098
C BAL1 BAL2 BAL3 BAL4 BAL5 BAL6 BAL7 BAL8 BAL9 BAL10
C .072238804 -1.8653096 -1. 1.0 8.53972127 5.85987 .42331 1.15572715 6.40017231 6.39917231
C CAT1 CAT2 CAT3 CAT4 CAT5 CAT6 CAT7 CAT8 CAT9 CAT10
C 0.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0
BLANK card ending node voltage outputs
C DUM1 DUM2 DUM3 DUM4 DUM5 DUM6 DUM7 DUM8 DUM9 DUM10
C 1.0 3.87400715 -1.5625528 22.4590591 72.4590591 3.31831016 179.999848 3.14159 -4. -3.14159
C EAT1 EAT2 EAT3 EAT4 EAT5 EAT6 EAT7 EAT8 EAT9 EAT10
C 4.0 -.99999933 2.30103 .785398163 7.3890561 -.52359878 1.04719755 .813467631 .761594156 .761594156
C FAT1 FAT2 FAT3 FAT4 FAT5 FAT6 FAT7 FAT8 FAT9 FAT10
C .57734968 1.15470056 .117099841 -.70710678 -3. 5.0 -3.2763323 1.3114543 -4.85987 -.42331
C GAS1 GAS2 GAS3 GAS4 GAS5 GAS6 GAS7 GAS8 GAS9 GAS10
C 1.15572715 17.2586339 2.48054157 .9990005 .9990005 .9990005 .9990005 .9990005 .9990005 3.999
BLANK card ending plot cards
BEGIN NEW DATA CASE
C 5th of 6 subcases documents pocket calculator applied to many intermediate
C variables. This was the beginning of Orlando Hevia's R7U.DAT which was
C added 6 August 2010. Exceptional Lists 4 & 26 are close to their minima.
C The electrical network was substantial, but is of no interest here so has
C been omitted. The $PARAMETER data seemed plenty creative to WSM. Volume
C is unlimited as KNT is unlimited. But who deserves credit for imagining
C such use? Perhaps Prof. Hans Kr. Hoidalen, the author of ATPDraw! E-mail
C from Mr. Hevia dated Sunday, August 15, 2010 explained: "The lines are
C generated by an ATPDraw option, @FILE. It is a sort of pointlist, with
C the possibility of one or more columns. Just before ATPDraw runs ATP, it
C generates the lines as you see in r7u.dat. I know the @FILE option because
C the user sent the question with his problem." In any case, with such use
C as this, the pocket calculator suddenly must handle more voluminous data,
C particularly intermediate variables. List 4 (sources) storage of the load
C flow is being used for the first time as previously-fixed dimensions of
C the pocket calculator are made variable. Not all, but an important part.
C 8 previously-fixed vectors have been made variable. WSM, 19 August 2010.
NEW LIST SIZES { Request for a change to program table sizes (VARDIM input)
DEFAULT 3.0 { Any blank field will be converted to 3 times default value
0 0 0 840 { List 4 = 840 of LISTSIZE.BPA is adequate
BLANK card for lists 11-20.
0 0 0 0 0 950 { KONST use below requires this
390 300 { Optional card for Lists 31, etc. --- as LISTSIZE.BPA
240000 742 { Offsets for supporting programs (non-simulation overlays)
C Controls of following request card: MAXKNT IOPCVP NOSTAT { Loop 50 times
POCKET CALCULATOR VARIES PARAMETERS 50 0
C $DEBUG, 9, { For diagnostic output of pocket calculator, activate this request
C Following use of tags continues to work, but is being augmented by the
C more powerful definition of all such indices at once (see below).
C $PARAMETER INDOFF=121 KONST=242
C As long as List 4 is limited to 840 (in LISTSIZE.BPA as of 7 August 2010), it
C is necessary to optimize the compilation by the pocket calculator. This can
C be seen from the end of diagnostic output, which shows a need for 913 cells:
C ---- Assembler after replace any SN= ----
C 117 IP________=IP
C COPY IP IP____ 913
C New input:EOF
C Without this many cells for List 4, the following line is necessary. It will
C reduce the preceding 913 to 789 which is well within the 840 cells available:
C $PARAMETER NOOPT=0 { Restore compiler optimization that 2nd subcase ended
C $PARAMETER MAXASS=990 NOOPT=0
C $PARAMETER MAXLHS=170 --- For a week or so this was honored, but no longer
C Having disabled all of the old definitions, consider the new, better way:
C 1 2 3 4 5 6
C 34567890123456789012345678901234567890123456789012345678901234
C INDOFF KONST NOOPT MAXASS MAXLHS
$PARAMETER LIMITS : 121 242 0 990 170
$PARAMETER
F01001=(KNT.EQ.1.)*229.6111+(KNT.EQ.2.)*233.69775 $$
F01002=(KNT.EQ.3.)*158.12631+(KNT.EQ.4.)*108.91404 $$
F01003=(KNT.EQ.5.)*278.28978+(KNT.EQ.6.)*96.295541 $$
F01004=(KNT.EQ.7.)*239.16153+(KNT.EQ.8.)*187.79161 $$
F01005=(KNT.EQ.9.)*93.658151+(KNT.EQ.10.)*192.55105 $$
F01006=(KNT.EQ.11.)*165.51983+(KNT.EQ.12.)*171.78016 $$
F01007=(KNT.EQ.13.)*269.06742+(KNT.EQ.14.)*256.13115 $$
F01008=(KNT.EQ.15.)*276.15484+(KNT.EQ.16.)*214.35659 $$
F01009=(KNT.EQ.17.)*171.24842+(KNT.EQ.18.)*332.23904 $$
F01010=(KNT.EQ.19.)*341.62624+(KNT.EQ.20.)*72.282156 $$
F01011=(KNT.EQ.21.)*206.20294+(KNT.EQ.22.)*292.75362 $$
F01012=(KNT.EQ.23.)*190.11552+(KNT.EQ.24.)*271.59629 $$
F01013=(KNT.EQ.25.)*278.79531+(KNT.EQ.26.)*312.74695 $$
F01014=(KNT.EQ.27.)*338.04959+(KNT.EQ.28.)*79.377109 $$
F01015=(KNT.EQ.29.)*291.07469+(KNT.EQ.30.)*52.334939 $$
F01016=(KNT.EQ.31.)*113.32174+(KNT.EQ.32.)*198.40889 $$
F01017=(KNT.EQ.33.)*338.27422+(KNT.EQ.34.)*254.87681 $$
F01018=(KNT.EQ.35.)*74.500633+(KNT.EQ.36.)*52.138059 $$
F01019=(KNT.EQ.37.)*44.356605+(KNT.EQ.38.)*301.45684 $$
F01020=(KNT.EQ.39.)*305.09034+(KNT.EQ.40.)*173.39597 $$
F01021=(KNT.EQ.41.)*66.13517+(KNT.EQ.42.)*213.79447 $$
F01022=(KNT.EQ.43.)*83.636753+(KNT.EQ.44.)*242.91365 $$
F01023=(KNT.EQ.45.)*249.7637+(KNT.EQ.46.)*178.4586 $$
F01024=(KNT.EQ.47.)*193.61877+(KNT.EQ.48.)*110.70991 $$
F01025=(KNT.EQ.49.)*221.4351+(KNT.GE.50.)*339.68186 $$
P01001=F01001+F01002+F01003+F01004+F01005+F01006+F01007+F01008+F01009 $$
P01002=P01001+F01010+F01011+F01012+F01013+F01014+F01015+F01016+F01017 $$
P01003=P01002+F01018+F01019+F01020+F01021+F01022+F01023+F01024+F01025 $$
ANGAI=P01003 $$
F02001=+(KNT.EQ.1.)*349.6111+(KNT.EQ.2.)*353.69775 $$
F02002=(KNT.EQ.3.)*278.12631+(KNT.EQ.4.)*228.91404 $$
F02003=(KNT.EQ.5.)*398.28978+(KNT.EQ.6.)*216.29554 $$
F02004=(KNT.EQ.7.)*359.16153+(KNT.EQ.8.)*307.79161 $$
F02005=(KNT.EQ.9.)*213.65815+(KNT.EQ.10.)*312.55105 $$
F02006=(KNT.EQ.11.)*285.51983+(KNT.EQ.12.)*291.78016 $$
F02007=(KNT.EQ.13.)*389.06742+(KNT.EQ.14.)*376.13115 $$
F02008=(KNT.EQ.15.)*396.15484+(KNT.EQ.16.)*334.35659 $$
F02009=(KNT.EQ.17.)*291.24842+(KNT.EQ.18.)*452.23904 $$
F02010=(KNT.EQ.19.)*461.62624+(KNT.EQ.20.)*192.28216 $$
F02011=(KNT.EQ.21.)*326.20294+(KNT.EQ.22.)*412.75362 $$
F02012=(KNT.EQ.23.)*310.11552+(KNT.EQ.24.)*391.59629 $$
F02013=(KNT.EQ.25.)*398.79531+(KNT.EQ.26.)*432.74695 $$
F02014=(KNT.EQ.27.)*458.04959+(KNT.EQ.28.)*199.37711 $$
F02015=(KNT.EQ.29.)*411.07469+(KNT.EQ.30.)*172.33494 $$
F02016=(KNT.EQ.31.)*233.32174+(KNT.EQ.32.)*318.40889 $$
F02017=(KNT.EQ.33.)*458.27422+(KNT.EQ.34.)*374.87681 $$
F02018=(KNT.EQ.35.)*194.50063+(KNT.EQ.36.)*172.13806 $$
F02019=(KNT.EQ.37.)*164.3566+(KNT.EQ.38.)*421.45684 $$
F02020=(KNT.EQ.39.)*425.09034+(KNT.EQ.40.)*293.39597 $$
F02021=(KNT.EQ.41.)*186.13517+(KNT.EQ.42.)*333.79447 $$
F02022=(KNT.EQ.43.)*203.63675+(KNT.EQ.44.)*362.91365 $$
F02023=(KNT.EQ.45.)*369.7637+(KNT.EQ.46.)*298.4586 $$
F02024=(KNT.EQ.47.)*313.61877+(KNT.EQ.48.)*230.70991 $$
F02025=(KNT.EQ.49.)*341.4351+(KNT.GE.50.)*459.68186 $$
P02001=F02001+F02002+F02003+F02004+F02005+F02006+F02007+F02008+F02009 $$
P02002=P02001+F02010+F02011+F02012+F02013+F02014+F02015+F02016+F02017 $$
P02003=P02002+F02018+F02019+F02020+F02021+F02022+F02023+F02024+F02025 $$
ANGBI=P02003 $$
F03001=+(KNT.EQ.1.)*109.6111+(KNT.EQ.2.)*113.69775 $$
F03002=(KNT.EQ.3.)*38.126311+(KNT.EQ.4.)*-11.085959 $$
F03003=(KNT.EQ.5.)*158.28978+(KNT.EQ.6.)*-23.704459 $$
F03004=(KNT.EQ.7.)*119.16153+(KNT.EQ.8.)*67.791614 $$
F03005=(KNT.EQ.9.)*-26.341849+(KNT.EQ.10.)*72.551051 $$
F03006=(KNT.EQ.11.)*45.51983+(KNT.EQ.12.)*51.780155 $$
F03007=(KNT.EQ.13.)*149.06742+(KNT.EQ.14.)*136.13115 $$
F03008=(KNT.EQ.15.)*156.15484+(KNT.EQ.16.)*94.356592 $$
F03009=(KNT.EQ.17.)*51.248423+(KNT.EQ.18.)*212.23904 $$
F03010=(KNT.EQ.19.)*221.62624+(KNT.EQ.20.)*-47.717844 $$
F03011=(KNT.EQ.21.)*86.202936+(KNT.EQ.22.)*172.75362 $$
F03012=(KNT.EQ.23.)*70.115523+(KNT.EQ.24.)*151.59629 $$
F03013=(KNT.EQ.25.)*158.79531+(KNT.EQ.26.)*192.74695 $$
F03014=(KNT.EQ.27.)*218.04959+(KNT.EQ.28.)*-40.622891 $$
F03015=(KNT.EQ.29.)*171.07469+(KNT.EQ.30.)*-67.665061 $$
F03016=(KNT.EQ.31.)*-6.6782645+(KNT.EQ.32.)*78.408894 $$
F03017=(KNT.EQ.33.)*218.27422+(KNT.EQ.34.)*134.87681 $$
F03018=(KNT.EQ.35.)*-45.499367+(KNT.EQ.36.)*-67.861941 $$
F03019=(KNT.EQ.37.)*-75.643395+(KNT.EQ.38.)*181.45684 $$
F03020=(KNT.EQ.39.)*185.09034+(KNT.EQ.40.)*53.395974 $$
F03021=(KNT.EQ.41.)*-53.86483+(KNT.EQ.42.)*93.794469 $$
F03022=(KNT.EQ.43.)*-36.363247+(KNT.EQ.44.)*122.91365 $$
F03023=(KNT.EQ.45.)*129.7637+(KNT.EQ.46.)*58.458596 $$
F03024=(KNT.EQ.47.)*73.618773+(KNT.EQ.48.)*-9.2900913 $$
F03025=(KNT.EQ.49.)*101.4351+(KNT.GE.50.)*219.68186 $$
P03001=F03001+F03002+F03003+F03004+F03005+F03006+F03007+F03008+F03009 $$
P03002=P03001+F03010+F03011+F03012+F03013+F03014+F03015+F03016+F03017 $$
P03003=P03002+F03018+F03019+F03020+F03021+F03022+F03023+F03024+F03025 $$
ANGCI=P03003 $$
F04001=+(KNT.EQ.1.)*65300.+(KNT.EQ.2.)*30667.412 $$
F04002=(KNT.EQ.3.)*31979.935+(KNT.EQ.4.)*81276.349 $$
F04003=(KNT.EQ.5.)*18906.501+(KNT.EQ.6.)*21719.44 $$
F04004=(KNT.EQ.7.)*7124.8541+(KNT.EQ.8.)*4846.9281 $$
F04005=(KNT.EQ.9.)*12418.612+(KNT.EQ.10.)*32587.942 $$
F04006=(KNT.EQ.11.)*14560.237+(KNT.EQ.12.)*6698.0694 $$
F04007=(KNT.EQ.13.)*70803.752+(KNT.EQ.14.)*12315.218 $$
F04008=(KNT.EQ.15.)*24474.203+(KNT.EQ.16.)*24726.58 $$
F04009=(KNT.EQ.17.)*19379.812+(KNT.EQ.18.)*36500.402 $$
F04010=(KNT.EQ.19.)*19104.929+(KNT.EQ.20.)*4845.0075 $$
F04011=(KNT.EQ.21.)*9027.5757+(KNT.EQ.22.)*31403.277 $$
F04012=(KNT.EQ.23.)*7222.6444+(KNT.EQ.24.)*17609.525 $$
F04013=(KNT.EQ.25.)*9836.8418+(KNT.EQ.26.)*7827.2433 $$
F04014=(KNT.EQ.27.)*9097.1448+(KNT.EQ.28.)*16693.945 $$
F04015=(KNT.EQ.29.)*29337.654+(KNT.EQ.30.)*22084.662 $$
F04016=(KNT.EQ.31.)*70211.788+(KNT.EQ.32.)*19456.883 $$
F04017=(KNT.EQ.33.)*5592.8618+(KNT.EQ.34.)*24983.583 $$
F04018=(KNT.EQ.35.)*26539.252+(KNT.EQ.36.)*33746.765 $$
F04019=(KNT.EQ.37.)*40387.027+(KNT.EQ.38.)*86591.522 $$
F04020=(KNT.EQ.39.)*14466.269+(KNT.EQ.40.)*31953.179 $$
F04021=(KNT.EQ.41.)*24428.887+(KNT.EQ.42.)*14013.494 $$
F04022=(KNT.EQ.43.)*200790.43+(KNT.EQ.44.)*19225.061 $$
F04023=(KNT.EQ.45.)*6217.3361+(KNT.EQ.46.)*140243.24 $$
F04024=(KNT.EQ.47.)*34046.067+(KNT.EQ.48.)*8264.9251 $$
F04025=(KNT.EQ.49.)*45450.444+(KNT.GE.50.)*85889.85 $$
P04001=F04001+F04002+F04003+F04004+F04005+F04006+F04007+F04008+F04009 $$
P04002=P04001+F04010+F04011+F04012+F04013+F04014+F04015+F04016+F04017 $$
P04003=P04002+F04018+F04019+F04020+F04021+F04022+F04023+F04024+F04025 $$
IP=P04003 $$
IP________=IP
IQ______=IP
ANGC______=ANGCI
ANGB______=ANGBI
ANGA______=ANGAI
C Intermediate variable before parameter itself. |IP=P04003 $$
C Parameter 1 defined. Value = 6.530000E+04 |IP________=IP
C Parameter 2 defined. Value = 6.530000E+04 |IQ______=IP
C Parameter 3 defined. Value = 1.096111E+02 |ANGC______=ANGCI
C Parameter 4 defined. Value = 3.496111E+02 |ANGB______=ANGBI
C Parameter 5 defined. Value = 2.296111E+02 |ANGA______=ANGAI
BLANK card ends input to $PARAMETER
5.E-9 6.E-6
500 1 1 1 1 0 0 1 0
C The rest of R7U.DAT is of no particular interest, so terminate execution:
$ABORT
BEGIN NEW DATA CASE
C 6th of 6 subcases illustrates a much more efficient representation of
C the preceding 5th subcase using the new SELECT function of the pocket
C calculator. The answer is unchanged. Variable names have been lengthened
C to avoid warnings, however. For the 3 angles, "ANG" has become "ANGL"
C in order that names reach the minimum of 6 bytes. Finally (the 4th of 4),
C "IP" has become "IPNAME". Warnings were avoided in the 5th subcase only
C because the names were internal to the pocket calculator (marked by a "$$"
C on the right edge). Using SELECT, there is no need for any such special
C treatment (note that all "$$" have been removed). WSM. 14 September 2010
C Controls of following request card: MAXKNT IOPCVP NOSTAT { Loop 50 times
POCKET CALCULATOR VARIES PARAMETERS 50 0
C 34567890123456789012345678901234567890123456789012345678901234
C INDOFF KONST NOOPT MAXASS MAXLHS
C $PARAMETER LIMITS : 121 242 0 990 170
C Note that the preceding expansion of calculator tables has been removed.
C Thanks to SELECT, storage is minimal. The numbers themselves do not
C count as they are stored in available numerical storage. Rather than
C 990 lines of assembly language (to which limit MAXASS applies), this
C data never exceeds 2. The SELECT function itself requires a single
C line and storage of the value that was selected requires a second. To
C prove that default dimensions work, we reset them:
C 34567890123456789012345678901234567890123456789012345678901234
C INDOFF KONST NOOPT MAXASS MAXLHS
$PARAMETER LIMITS : 60 120 0 270 170
C First, let's show how simple the use of SELECT makes the preceding 5th
C data subcase. The same values for ANGLAI, ANGLBI, ANGLCI, and IPNAME
C are produced with great economy of both data and computation as follows:
$PARAMETER
ANGLAI = SELECT ( KNT )
229.6111 233.69775 158.12631 108.91404 278.28978 96.295541 239.16153 187.79161
93.658151 192.55105 165.51983 171.78016 269.06742 256.13115 276.15484 214.35659
171.24842 332.23904 341.62624 72.282156 206.20294 292.75362 190.11552 271.59629
278.79531 312.74695 338.04959 79.377109 291.07469 52.334939 113.32174 198.40889
338.27422 254.87681 74.500633 52.138059 44.356605 301.45684 305.09034 173.39597
66.13517 213.79447 83.636753 242.91365 249.7637 178.4586 193.61877 110.70991
221.4351 339.68186
ANGLBI = SELECT ( KNT )
349.6111 353.69775 278.12631 228.91404 398.28978 216.29554 359.16153 307.79161
213.65815 312.55105 285.51983 291.78016 389.06742 376.13115 396.15484 334.35659
291.24842 452.23904 461.62624 192.28216 326.20294 412.75362 310.11552 391.59629
398.79531 432.74695 458.04959 199.37711 411.07469 172.33494 233.32174 318.40889
458.27422 374.87681 194.50063 172.13806 164.3566 421.45684 425.09034 293.39597
186.13517 333.79447 203.63675 362.91365 369.7637 298.4586 313.61877 230.70991
341.4351 459.68186
ANGLCI = SELECT ( KNT )
109.6111 113.69775 38.126311-11.085959 158.28978-23.704459 119.16153 67.791614
-26.341849 72.551051 45.51983 51.780155 149.06742 136.13115 156.15484 94.356592
51.248423 212.23904 221.62624-47.717844 86.202936 172.75362 70.115523 151.59629
158.79531 192.74695 218.04959-40.622891 171.07469-67.665061-6.6782645 78.408894
218.27422 134.87681-45.499367-67.861941-75.643395 181.45684 185.09034 53.395974
-53.86483 93.794469-36.363247 122.91365 129.7637 58.458596 73.618773-9.2900913
101.4351 219.68186
IPNAME = SELECT ( KNT )
65300. 30667.412 31979.935 81276.349 18906.501 21719.44 7124.8541 4846.9281
12418.612 32587.942 14560.237 6698.0694 70803.752 12315.218 24474.203 24726.58
19379.812 36500.402 19104.929 4845.0075 9027.5757 31403.277 7222.6444 17609.525
9836.8418 7827.2433 9097.1448 16693.945 29337.654 22084.662 70211.788 19456.883
5592.8618 24983.583 26539.252 33746.765 40387.027 86591.522 14466.269 31953.179
24428.887 14013.494 200790.43 19225.061 6217.3361 140243.24 34046.067 8264.9251
45450.444 85889.85
C Parameter 1 defined. Value = 2.296111E+02 |ANGLAI = SELECT ( KNT )
C Parameter 2 defined. Value = 3.496111E+02 |ANGLBI = SELECT ( KNT )
C Parameter 3 defined. Value = 1.096111E+02 |ANGLCI = SELECT ( KNT )
C Parameter 4 defined. Value = 6.530000E+04 |IPNAME = SELECT ( KNT )
BLANK card ends input to $PARAMETER
C That takes care of the 5th data subcase. Before leaving this 6th subcase,
C however, we will illustrate several variations. First, the argument of
C the SELECT function, which is not necessarily KNT. Yes, the PCVP loop
C counter KNT is the natural one, but not the only one. The argument of
C SELECT can involve pocket calculator math as shown by this modification
C which uses subscript VALUE4 = LL3 + 1 = 3 + 1 = 4. The 4th number of the
C following set is -11.085959 so this is the value that will be loaded into
C the left hand side ANGLCI. Final detail: LL3 is an ATP symbol which has
C integer value 3. Similarly LL4 (used later) has value 4.
$PARAMETER
VALUE4 = LL3 + 1.0 $$ { VALUE4 is an intermediate variable so a double dollar
PARAM5 = SELECT ( VALUE4 ) { This param #5 should have value -11.085959
109.6111 113.69775 38.126311-11.085959 { Truncate points at last one used (4)
C Also illustrate that comment lines are tolerated within data of SELECT. The
C following PARAM6 for parameter #6 should give a result that is identical
C to ANGLAI when KNT = 1 (all that is being used):
PARAM6 = SELECT ( KNT )
229.6111 233.69775 158.12631 108.91404 278.28978 96.295541 239.16153 187.79161
C 93.658151 192.55105 165.51983 171.78016 269.06742 256.13115 276.15484 214.35659
C 171.24842 332.23904 341.62624 72.282156 206.20294 292.75362 190.11552 271.59629
C 278.79531 312.74695 338.04959 79.377109 291.07469 52.334939 113.32174 198.40889
C 338.27422 254.87681 74.500633 52.138059 44.356605 301.45684 305.09034 173.39597
C 66.13517 213.79447 83.636753 242.91365 249.7637 178.4586 193.61877 110.70991
221.4351 339.68186 { An in-line comment is legal on partial final card
C Also illustrate that non-integer subscripts will result in a warning, but
C not a fatal error. Integer truncation will be used as in Fortran. Thus
C the value of PARAM7 should be identical to that of PARAM5. Once again
C only 4 data points are required, but the full first card of 10 will be
C used to illustrate the following blank card for termination.
VALUE5 = LL4 + 0.5 $$
PARAM7 = SELECT ( VALUE5 ) { This param #7 should have value -11.085959
109.6111 113.69775 38.126311-11.085959 158.28978-23.704459 119.16153 67.791614
BLANK card is needed to terminate SELECT since preceding card was full
C Finally illustrate that an excessive subscript will result in a warning, but
C not a fatal error. Just as for Prof. Hoidalen's data of the 5th subcase,
C the last data point will be used if a subscript is excessive. In this
C case, the subscript has value 5 whereas only 4 data points are defined.
PARAM8 = SELECT ( LL5 ) { This param #8 should have value -11.085959
109.6111 113.69775 38.126311-11.085959
C Intermediate variable before parameter itself. |VALUE4 = LL3 + 1.0 $$ { VALUE4 is an intermediate variable so a double dollar
C Parameter 5 defined. Value = -1.108596E+01 |PARAM5 = SELECT ( VALUE4 ) { This param #5 should have value -11.085959
C Parameter 6 defined. Value = 2.296111E+02 |PARAM6 = SELECT ( KNT )
C Intermediate variable before parameter itself. |VALUE5 = LL4 + 0.5 $$
C ### Warning. The argument of SELECT is not an integer. POCKE4 truncates to integer from 4.5000000E+00
C Parameter 7 defined. Value = -1.108596E+01 |PARAM7 = SELECT ( VALUE5 ) { This param #7 should have value -11.085959
C ### Warning. SELECT argument 5 is too large for data. POCKE4 uses last entry, number 4
C Parameter 8 defined. Value = -1.108596E+01 |PARAM8 = SELECT ( LL5 ) { This param #8 should have value -11.085959
BLANK card ends input to $PARAMETER
5.E-9 6.E-6
500 1 1 1
C The rest of R7U.DAT is of no particular interest, so terminate execution:
$ABORT
BEGIN NEW DATA CASE
BLANK
|