-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDMAP.TXT
More file actions
9521 lines (7017 loc) · 360 KB
/
DMAP.TXT
File metadata and controls
9521 lines (7017 loc) · 360 KB
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
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=PAGE=
5.1 INTRODUCTION
In addition to using the rigid formats provided automatically by NASTRAN,
you may wish to execute a series of modules in a different manner than
provided by a rigid format. Or he may wish to perform a series of matrix
operations which are not contained in any existing rigid format. If the
modifications to an existing rigid format are minor, the ALTER feature
described in Section 2 may be employed. Otherwise, a user-written Direct
Matrix Abstraction Program (DMAP) should be used.
DMAP is the user-oriented language used by NASTRAN to solve problems. A
rigid format is basically a collection of statements in this language. DMAP,
like English or FORTRAN, has many grammatical rules which must be followed to
be interpretable by the NASTRAN DMAP compiler. Section 5.2 provides you with
the rules of DMAP, which will allow him to understand the rigid format DMAP
sequences, write ALTER packages, and construct his own DMAP sequences using
the many modules contained in the NASTRAN DMAP repertoire.
Section 5.3 is an index of matrix, utility, user, and executive modules
which are contained in Sections 5.4 through 5.7 respectively.
Sections 5.4 through 5.7 describe individually the many nonstructurally
oriented modules contained in the NASTRAN library. Section 5.8 provides
several examples of DMAP usage.
User-written modules must conform to the rules and usage conventions
described herein.
Section 5.8 illustrates the use of DMAP operations in both the standard
method (as rigid formats are written) and in the improved method.
Section 5.9 describes the automatic ALTERs to a rigid format which result
from each of the automated multi-stage substructuring commands invoked by you.
Section 5.10 contains descriptions and uses of functional modules which are
of general utility to you but have not been permanently incorporated into the
rigid formats.
=PAGE=
5.2 DMAP RULES
Grammatically, DMAP instructions consist of two types: Executive Operation
Instructions and Functional Module Instructions. Grammatical rules for these
two types of instructions will be discussed separately in following sections.
Functional modules are arbitrarily classified as structural modules, matrix
operation modules, utility modules, or user-generated modules.
The DMAP sequence itself consists of a series of DMAP instructions or
statements, the first of which is BEGIN or XDMAP and the last of which is END.
The remaining statements consist of Executive Operation instructions and
Functional Module calls.
5.2.1 DMAP Rules for Functional Module Instructions
The primary characteristic of the Functional Module DMAP instruction is its
prescribed format. The general form of the Functional Module DMAP statement
is:
MOD I1,I2,...,Im/01,02,...,0n/a1,b1,p1/a2,b2,p2.../az,bz,pz $
where MOD is the DMAP Functional Module name,
Ii (i = 1,m) are the Input Data Block names,
0i (i = 1,n) are the Output Data Block names, and
ai,bi,pi (i = 1,z) are the Parameter Sections.
In the general form shown above, commas (,) are used to separate several
like items while slashes (/) are used to separate sections from one another.
The module name is separated from the rest of the instruction by a blank or a
comma (,). The dollar sign ($) is used to end the instruction and is not
required unless the instruction ends in the delimiter /. A DMAP statement is
restricted to columns 1 through 72. Information beyond column 72 is ignored.
If the entire DMAP instruction does not fit on one card, the last delimiter
(not followed by a $ sign) causes the next card to be read as a continuation.
Thus, one DMAP instruction may occupy several cards. Blanks may be used in
conjunction with any of the above delimiters for ease of reading. If it is
desired to preserve the output alignment of the printed instructions, the
module name is begun in column 1 and the rest of the instruction is begun in
column 10 when supplying alters to a Rigid Format.
A functional module communicates with other modules and the executive
system entirely through its inputs, outputs, and parameters. The
characteristics or attributes of each functional module are contained in the
Module Properties List (MPL) described in Section 2.4 of the Programmer's
Manual and are reflected in the DMAP Module Descriptions that follow in
Section 5.3 and in the Module Functional Descriptions contained in Chapter 4
of the Programmer's Manual. The module name is a BCD value (which consists of
an alphabetic character followed by up to seven additional alphanumeric
characters) and must correspond to an entry in the MPL. A Data Block name may
be either a BCD value or null. The absence of a BCD value indicates that the
Data Block is not needed for a particular application.
5.2.1.1 Functional Module DMAP Statements
Each Functional Module DMAP statement must conform to the MPL regarding:
1. Name spelling
2. Number of input data blocks
3. Number of output data blocks
4. Number of parameters
5. Type of each parameter
NOTE: See Sections 5.2.1.3 and 5.2.1.4 for allowable exceptions to these
rules.
5.2.1.2 Functional Module Names
The only Functional Module DMAP names allowed are those contained in the
MPL. Therefore, if you want to add a module, you must either use one of the
User Module names provided (see Section 5.6) or add a name to the MPL. The
Programmer's Manual should be consulted when adding a new module to NASTRAN.
5.2.1.3 Functional Module Input Data Blocks
In most cases an input data block should have been previously defined in a
DMAP program before it is used. However, there may be instances in which a
module can handle, or may even expect, a data block that is undefined at the
time the module is initially called. An input data block is previously defined
if it appears as an output data block in a previous DMAP instruction, as
output from the Input File Processor, as any user-input (via Bulk Data Cards)
DMI or DTI data block name, or exists on the Old Problem Tape in a restart
problem. Although the number of data blocks is prescribed, if any number of
final data blocks are null, they may be omitted from the section. For example,
the module TABPT, which uses five input data blocks, may be defined by:
TABPT GEOM1,,,, // $
or
TABPT GEOM1 // $
A potentially fatal error message (see Section 5.2.1.7) will be issued at
compilation time to warn you that a discrepancy in the data block name list
has been detected. This is also true if a previously undefined data block is
used as input. Also, see the "error-level" option on the XDMAP compiler option
card, which you may invoke to terminate execution in the event of such errors.
5.2.1.4 Functional Module Output Data Blocks
In general, a data block name will appear as output only once. However,
there are cases in which an output data block may be of no subsequent use in a
DMAP program. In such a case the name may be used again, but caution should be
used when employing such techniques. Although the number of output data blocks
is prescribed, the data block name list may be abbreviated in the manner of
Section 5.2.1.3. Potentially fatal error messages will warn you if possible
ambiguities may occur from these usages.
5.2.1.5 Functional Module Parameters
Parameters may serve many purposes in a DMAP program. They may pass data
values into and out from a module, or they may be used as flags to control the
computational flow within the module or the DMAP program. There are two
allowable forms of the parameter section of the DMAP instruction. The first
explicitly states the attributes of the parameters, while the second is a
briefer simplified specification. The general form of the formal parameter
section is:
/ ai,bi,pi /
where the allowable parameter specifications are:
ai = V Parameter value is variable and may be changed by the module
during execution.
ai = C Parameter value is prescribed initially by you and is an
unalterable constant.
ai = S Parameter is of type V, and will be saved automatically at
completion of module. (See description of the SAVE
instruction.)
bi = Y Initial parameter value may be specified on a PARAM Bulk Data
card.
bi = N Initial parameter value may not be specified on a PARAM Bulk
Data card.
pi = PNAME = v or pi = PNAME or pi = v PNAME is a BCD name selected by you
to represent a given parameter.
The default values for ai and bi depend on the value given for pi, as
described below. The three forms available for pi require additional
clarification. The symbol "v" represents an actual numeric value for the
parameter and may be used only when ai = C and bi = N. The other forms will be
clarified by the examples found at the end of this section. Each parameter has
an initial value which is established when the DMAP sequence is compiled
during execution of the NASTRAN preface. The means by which initial values are
established for all DMAP parameters will be explained by the symbolic examples
that follow. The value used at execution time may differ from the initial
value if and only if the module changes the value, if ai = "V", and if the
parameter name appears in a SAVE (see Section 5.7) instruction immediately
following the module.
The formal parameter specifications defined above can, in frequently
encountered instances, be greatly simplified. Situations where these
simplifications may be used are:
1. / C,N,v / can be written as / v
The value "v" is written exactly as it would be in the formal specification
with the exception of BCD constant parameters, in which case the BCD string
is enclosed by asterisks, that is, / *STRING* /.
2. / V,N,PNAME / can be written as / PNAME /
/ V,N,PNAME=v / can be written as / PNAME=v /
Again, in the case where the value "v" appears, it is written exactly as in
the case of the formal specification. In this case, BCD strings are not
delimited by asterisks.
3. / (default value) / can be written as //
If a particular parameter has a predefined default value specified in the
Module Properties List (MPL), and you want to choose this value, then it is
necessary only to code successive slashes. If a parameter does not have a
default value, an error message will be issued.
Six parameter types are available and the type of each parameter is given
in the MPL and may not be changed. The types and examples of values as they
would be written in DMAP are given below:
PARAMETER TYPE VALUE EXAMPLES
Integer 7 -2 0
Real -3.6 2.4+5 0.01-3
BCD VAR01 STRING3 B3R56
Double Precision 2.5D-3 1.354D7
Complex Single Precision (1.0,-3.24)
Complex Double Precision (1.23D-2,-3.67D2)
Many possible forms of the parameter section may be used. The following
examples will help to clarify the possibilities.
// This is equivalent to / C,N,v / where v is the MPL default value
which must exist.
/ C,Y,v Constant input parameter
Examples: / C,N,0 / C,N,BKL0 / C,N,(1.0,-1.0)
or
/ 0 / *BKL0* / (1.0,-1.0)
In the examples shown, both in formal and simplified form, the
values 0 (integer), BKL0 (BCD), and 1.0-i1.0 (complex single
precision) are defined.
/ C,Y,PNAMEConstant input parameter; MPL default value is used unless a PARAM
Bulk Data card referencing PNAME is present. Error condition is
detected if either no PARAM card is present or no MPL default
value exists.
/ C,Y,PNAME=v Constant input parameter; the value v is used unless a PARAM
Bulk Data card referencing PNAME is present.
/ V,Y,PNAME or V,Y,PNAME=v Variable parameter; may be input, output, or both;
initial value is the first of
1. value from the most recently executed SAVE instruction, if
any
2. value from PARAM Bulk Data card referencing PNAME will be
used if present in Bulk Data Deck
3. v, if present in DMAP instruction
4. MPL default value, if any
5. 0
If a parameter is output from a functional module and if the
output value is to be carried forward, a SAVE instruction must
immediately follow the DMAP instruction in which the parameter is
generated.
/ V,N,PNAME or / PNAME or / V,N,PNAME=v or /PNAME=v Variable parameter; may
be input, output, or both; initial value is the first of
1. value from the most recently executed SAVE instruction, if
any
2. v, if present in DMAP instruction
3. MPL default value, if any
4. 0
5.2.1.6 DMAP Compiler Options - The XDMAP Instruction (see Section 5.7)
You can elect several options when compiling and executing a DMAP program
by including an XDMAP compiler option instruction in the program. Similarly,
the Rigid Formats may be altered by replacing the BEGIN statement with XDMAP
to invoke the same options. The available options are:
GO (default) or NOGO
The GO option compiles and executes the program, while NOGO terminates the job
at the conclusion of compilation.
LIST or NOLIST
The LIST option produces a DMAP program source listing. See the description of
the XDMAP card in Section 5.7 for the default values for this option.
DECK or NODECK (default)
The DECK option produces a punched card deck of the program.
OSCAR or NOOSCAR (default)
If the OSCAR option is selected, a complete listing of the Operation Sequence
Control Array is produced.
REF or NOREF (default)
The REF option produces a complete cross reference listing of variable
parameters, data block names, and module calls for the DMAP program.
ERR=0 or 1 or 2 (default)
This option specifies the error level at which termination of the job will
occur, 0 for WARNING, 1 for POTENTIALLY FATAL, and 2 for FATAL ERROR MESSAGE.
See Section 5.2.1.7 for further explanation.
The complete description of the XDMAP card may be found in Section 5.7,
dealing with Executive Operation Modules. Note that an XDMAP card need not
appear when all default values are elected, but may be replaced with a BEGIN
instruction.
5.2.1.7 Extended Error Handling Facility
There are three levels of error messages generated during the compilation
of a DMAP sequence. These levels are WARNING MESSAGE, POTENTIALLY FATAL ERROR
MESSAGE, and FATAL ERROR MESSAGE. You have, through available compiler
options, the ability to specify the error level at which the job will be
terminated. (See Section 5.2.1.6 for the manner of specification.) The class
of POTENTIALLY FATAL ERROR MESSAGES is generated by certain compiler
conveniences which, if not fully understood by you, could cause an erroneous
or incorrect execution of the DMAP sequence. The default value for the error
level is that of the FATAL ERROR MESSAGE.
5.2.2 DMAP Rules for Executive Operation Instructions
Each executive operation statement has its own format which is generally
open-ended, meaning the number of inputs, outputs, etc. is not prescribed.
Executive operation instructions or statements are divided into general
categories as follows:
1. Declarative instructions FILE, BEGIN, LABEL. XDMAP, and PRECHK which aid
the DMAP compiler and the file allocator as well as provide user
convenience.
2. Instructions CHKPNT, EQUIV, PURGE, and SAVE which aid the NASTRAN
Executive System in allocating files, interfacing between functional
modules, and in restarting a problem.
3. Control instructions REPT, JUMP, COND, EXIT, and END which control the
order in which DMAP instructions are executed.
The rules associated with the executive operation instructions are distinct
for each instruction and are discussed individually in Section 5.7.
5.2.3 Techniques and Examples of Executive Module Usage
Even though the DMAP program may be interpretable by the DMAP compiler this
does not guarantee that the program will yield the desired results. Therefore,
this section is provided to acquaint you with techniques and examples used in
writing DMAP programs. In particular, the instructions REPT, FILE, EQUIV,
PURGE, and CHKPNT will now be discussed in some detail. The DMAP modules
available are listed in Section 5.3.
The new DMAP user should read Sections 5.4 through 5.7 to obtain the
necessary knowledge of terminology before reading this section.
The data blocks and functional modules referenced in the following examples
are fictitious and have no relationship to any real data blocks or functional
modules.
A data block is described as having a status of "not generated",
"generated", or "purged." A status of not generated means that the data block
is available for generation by appearing as output in a functional module. A
status of generated means that the data block contains data which is available
for input to a subsequent module. A status of purged means that the data block
cannot be generated and any functional module attempting to use this data
block as input or output will be informed that the purged data block is not
available for use.
5.2.3.1 The REPT and FILE Instructions (see Section 5.7)
The DMAP instructions bounded by the REPT instruction and the label
referenced by the REPT instruction are referred to as a loop. The location
referenced by the REPT is called the top of the loop. In many respects a DMAP
loop is like a giant functional module since it requires inputs and generates
output data blocks which usually can be handled correctly by the file
allocator (see Section 4.9 of the Programmer's Manual) without any special
action by you. The one exception is a data block that is not referenced
outside the loop (that is, an internal data block with respect to the loop).
The file allocator considers internal data blocks as scratch data blocks to be
used for the present pass through the loop but not to be saved for input at
the top of the loop. To save an internal data block, declare the data block
SAVE in the FILE instruction.
When the REPT instruction transfers control back to the top of the loop,
the status of all internal data blocks is changed to "not generated" unless
the internal data block is declared SAVE or APPEND in a FILE instruction. It
should also be noted that equivalences established between internal data
blocks (not declared saved) and data blocks referenced outside the loop are
not carried over for the next time through the loop. The equivalence must be
re-established each time through the loop. Data blocks generated by the Input
File Processor are considered referenced outside of all DMAP loops.
Example Using REPT and FILE Instructions
Ú
³ BEGIN $
³ FILE X=SAVE / Y=APPEND / Z=APPEND $
³ LABEL L1 $
³ MOD1 B/W,Y $
³ COND L3,PX $
DMAP ³ MOD2 A/X/V,N,PX=0 $
loop ³ SAVE PX $
³ LABEL L3 $
³ MOD3 W,X,Y/Z $
³ REPT L1,1 $
³ MOD4 Z// $
³ END $
À
Assume that MOD2 sets PX < 0 when it is executed. Note that Z is declared
APPEND, whereas Y will be saved since it is an internal data block that is to
be appended. X is an internal data block that is to be saved since it will
only be generated the first time through the loop but is needed as input each
time the loop is repeated. W is an internal data block that is generated each
time through the loop; therefore, it is not saved.
The following table shows what happens when the above DMAP program is
executed. Only modules being executed are shown in the table. Data blocks A
and B are assumed to be generated by the Input File Processor, and hence are
considered referenced outside of all DMAP loops.
Module Input status Output status and comments
being and comments
executed
MOD1 B - assumed generated by W, Y - generated
the input file processor
COND PX is 0 No transfer occurs since PX >= 0
MOD2 A - assumed generated by X - generated
the input file processor PX is set < 0
SAVE PX < 0 The value created above is saved for
subsequent use.
MOD3 W, X, Y are all generated Z - generated
at this point
REPT Loop count is Transfer to L1 - set loop count to 1-
initially set to 1 1=0. Status of data blocks at top of
loop will be: A, B, Z - generated
(referenced outsIde loop) X, Y -
generated (internal data blocks
declared saved) W - not generated
(internal data block)
MOD1 B - generated W - generated
Y - generated (appended)
COND PX is now < 0 due to Transfer to L3 occurs
SAVE
MOD3 W, X, Y - generated Z - generated (appended)
REPT Loop count is now 0 No transfer occurs.
MOD4 Z - generated Output to printer (assumed)
END Normal termination of problem.
5.2.3.2 The EQUIV Instruction (see Section 5.7)
There are no restrictions on the status of data blocks referenced in an
EQUIV instruction. Consider the instruction EQUIV A,B1,...,BN/P $ when P < 0.
Data blocks B1,...,BN take on all the characteristics of data block A
including the status of A. This means the status of some Bj can change from
purged to generated or not generated.
The EQUIV instruction will unequivalence data blocks when P >= 0. In an
unequivalence operation, the status of all secondary data blocks reverts to
not generated.
Suppose A, B, and C are all equivalenced and P >= 0. EQUIV A,B/P $ will
break the equivalence between A and B but not between A and C.
Now consider the following situation. Data block B is to be generated by
repeatedly executing functional module MOD2. The input to MOD2 is the previous
output from MOD2. That is to say, each successive generation of B depends on
the previous B generated. The following example shows how the EQUIV
instruction is used to solve this problem. Assume parameter BREAK >= 0 and
parameter LINK < 0.
Example of EQUIV Instruction
BEGIN $
MOD1 A/B $
Ú LABEL L1 $
DMAP ³ EQUIV B,BB/BREAK $
loop ³ MOD2 B/BB $
³ EQUIV BB,B/LINK $
À REPT L1,1 $
MOD3 BB// $
END
The following table shows what happens when the above DMAP program is
executed. Only modules being executed are shown in the table.
Module Input status Output status and comments
being and comments
executed
MOD1 A - assumed generated by B - generated
input processor
EQUIV B will not be equivalenced No action taken
to BB since BREAK >= 0
MOD2 B - generated BB - generated
EQUIV BB and B are not B is equivalenced to BB. That is,
equivalenced. B assumes all of the characteristics
B - generated of BB. B and BB then both have the
BB - generated status of generated.
LINK < 0.
REPT Loop count is Transfer to L1; set loop count to
initially 1 1-1=0.
EQUIV B and BB are generated The equivalence is broken;
and equivalenced. B - generated, BB - not generated
BREAK >= 0.
MOD2 B - generated BB - generated
EQUIV BB and B are generated B equivalenced to BB; B, BB
and not equivalenced. - generated
LINK < 0.
REPT Loop count is 0 No transfer occurs.
MOD3 BB - generated Output to printer (assumed)
END Normal termination of problem.
Since equivalences are automatically broken between internal files (not
declared saved) and files referenced outside the loop, the above DMAP program
could be written as follows and the same results achieved.
BEGIN $
MOD1 A/B $
Ú LABEL L1 $
DMAP ³ MOD2 B/BB $
loop ³ EQUIV BB,B/LINK $
À REPT L1,1 $
MOD3 B// $
END
Data block BB is now internal; therefore, the instruction EQUIV B,BB/BREAK $
is not needed.
5.2.3.3 The PURGE Instruction (see Section 5.7)
The status of a data block is changed to purged by explicitly or implicitly
purging it. A data block is explicitly purged through the PURGE instruction,
whereas it is implicitly purged if it is not created by the functional module
in which it appears as an output.
The primary purpose of the PURGE instruction is to prepurge data blocks.
Prepurging is the explicit purging of a data block prior to its appearance as
output from a functional module. Prepurging data blocks allows the NASTRAN
executive system to allocate available files more efficiently, which decreases
problem execution time. You should look for data blocks that can be prepurged
and purge them as soon as it is recognized that they will not be generated.
Sometimes during the execution of a problem it is necessary to generate a
data block whose status is purged. This situation can occur both in DMAP
looping and in a modified restart situation. In order to generate a data block
that is purged it is first necessary to unpurge it (that is, change its status
from purged to not generated). Unpurging is achieved by executing a PURGE
instruction which references the purged data block and whose purge parameter
is positive.
The PURGE instruction thus has two functions, to unpurge as well as purge
data blocks, depending on the value of the purge parameter and the status of
the referenced data block. The following table shows what action is taken by
the PURGE instruction for all combinations of input.
PURGE A/P $
Status of data block Value of P Status of Data block
A prior to PURGE A after PURGE
Not generated P >= 0 Not generated (that is, no action taken)
Not generated P < 0 Purged
Generated P >= 0 Generated (that is, no action taken)
Generated P < 0 Purged
Purged P >= 0 Not generated (that is, unpurged)
Purged P < 0 Purged (that is, no action taken)
You may wonder why you should not prepurge all data blocks and then unpurge
them when necessary in order to really assist the file allocator. The reason
not to do this is that there is a limited amount of space in the table where
the status of data blocks is kept. This table may overflow if too many data
blocks are purged at one time. Therefore, only prepurge those data blocks that
can truly be prepurged.
Example of Explicit and Implicit Purging and Prepurging
BEGIN $
MOD1 IP/A/V,Y,PX/V,Y,PY/V,Y,PB $
SAVE PX,PY,PB $
PURGE X/PX / Y/PY $
MOD2 A/B,C,D/V,Y,PB/V,Y,PC $
SAVE PC $
PURGE C/PC $
MOD3 B,C,D/E $
MOD4 E/X,Y,Z $
MOD5 X,Y,Z// $
END $
Assume that module MOD1 sets PX < 0, PY >= 0 and PB = 0. Assume that B is not
generated by MOD2 if PB = 0. Assume that MOD2 sets PC < 0, but does not change
PB.
The following table shows what happens when the above DMAP program is
executed. Only modules being executed are shown in the table.
Module Input status Output status and comments
being and comments
executed
MOD1 IP - assumed generated A - generated
by the input file PX < 0, PY >= 0, PB = 0
processor
SAVE PX < 0, PY >= 0, Parameter values are saved for use
PB = 0 in subsequent modules.
PURGE X,Y - not generated X - purged (that is, prepurged)
PX < 0, PY >= 0 Y - not generated
MOD2 A - generated; PB = 0 B - purged (that is, implicitly);
C, D - generated; PC 0.
SAVE PC < 0 PB value not saved since MOD2 did
not reset it.
PURGE C - generated C - purged
PC < 0
MOD3 B, C - purged E - generated
D - generated
MOD4 E - generated X - purged; Y - generated;
Z - generated
MOD5 X - purged Output to printer (assumed)
Y, Z - generated
END Normal termination of problem.
Example of Unpurging
BEGIN $
FILE X=SAVE/Y=SAVE $
FILE Z=APPEND $
MOD1 IP/A $
Ú LABEL L1 $
³ COND L2,NPX $
³ PURGE X/NPX $
³ MOD2 A/X,Y/V,Y,PX=0/V,N,NPX=0 $
DMAP ³ SAVE PX,NPX $
loop ³ PURGE X/PX $
³ LABEL L2 $
³ MOD3 X,Y/Z $
À REPT L1,2 $
MOD4 Z// $
END $
Assume that MOD2 sets PX < 0 and NPX >= 0 the first time it is executed.
Assume that MOD2 sets PX >= 0 and NPX < 0 the second time it is executed.
The following table shows what happens when the above DMAP program is
executed. Only modules being executed are shown in the table.
Module Input status Output status and comments
being and comments
executed
MOD1 IP - assumed generated by A - generated
input file processor.
COND NPX = 0 Jump not executed
PURGE X - not generated X - not generated (that is, no action
taken)
MOD2 A - generated X, Y - generated; PX < 0, NPX >= 0
SAVE PX < 0, NPX >= 0
PURGE X - generated; PX < 0 X - purged
MOD3 X - purged; Z - generated
Y - generated
REPT Loop count = 2 Transfer to location L1;
loop count = 1
COND NPX >= 0 Jump not executed
PURGE X - purged; NPX >= 0 X - not generated (that is, unpurged)
MOD2 A - generated X - generated; Y - generated (note
old data for Y is lost because Y not
Appended); PX >= 0, NPX <0
SAVE PX >= 0, NPX < 0
PURGE X - generated; PX >= 0 X - generated (that is, no action
taken)
MOD3 X,Y - generated Z - generated (note new data appended
to old because Z declared appended)
REPT Loop count = 1 Transfer to location L1;
loop count = 0
COND NPX < 0 Transfer to location L2
MOD3 X, Y - generated Z - generated (that is, appended)
REPT Loop count = 0 Fall through to next instruction
MOD4 Z - generated Output to printer (assumed)
END Normal termination of problem
5.2.3.4 The CHKPNT Instruction (see Section 5.7)
The CHKPNT instruction provides you with a means for saving data blocks for
subsequent restart of your problem with a minimum amount of redundant
processing. The following rules will assure you of the most efficient restart.
1. Checkpoint all output data blocks from every functional module.
2. Checkpoint all data blocks mentioned in a PURGE instruction.
3. Checkpoint all secondary data blocks in an EQUIV instruction. Never
checkpoint primary data blocks in an EQUIV instruction.
4. Checkpoint all data blocks mentioned above as soon as possible.
Example of Checkpointing
BEGIN $
MOD1 A/B,C/S,Y,P1/S,Y,P2 $
CHKPNT B,C $
PURGE X,Y/P1 / Z/P2 $
CHKPNT X,Y,Z $
EQUIV B,BB/P1 / C,CC,D/P2 $
CHKPNT BB,CC,D $
:
:
END $
In the example above, the data blocks were checkpointed as soon as possible,
which is the most straightforward way, but it required three calls to the
checkpoint module, which increases problem execution time. Since checkpointing
usually requires a small fraction of the total execution time, the most
straightforward method is recommended to avoid trouble.
The rigid format DMAP sequences (see Volume II) do not employ any explicit
CHKPNT instructions. Instead, for the sake of efficiency, each rigid format
includes a single PRECHK ALL instruction towards the beginning of the DMAP
sequence. (See Section 5.7 for the description of the PRECHK DMAP
instruction.) In keeping with the four rules mentioned above, the PRECHK ALL
instruction immediately and automatically CHKPNTs all output data blocks from
each functional module, all data blocks mentioned in each PURGE instruction,
and all secondary data blocks in each EQUIV instruction. The only exceptions
to this are the CASESS, CASEI, and CASECC data blocks appearing as output in
substructure analyses.
=PAGE=
5.3 INDEX OF DMAP MODULE DESCRIPTIONS
Descriptions of all nonstructurally oriented modules are contained herein,
arranged alphabetically by category as indicated by the lists below.
Descriptions for the structurally oriented modules are contained in Section 4
of the Programmer's Manual. They are listed here in order to provide a
complete list of all NASTRAN modules. Additional information regarding
nonstructurally oriented modules is also given in Section 4 of the
Programmer's Manual.
Matrix Operation Modules (16) Utility Modules (33)
(See Section 5.4) (See Section 5.5)
ADD MPY3 COPY OUTPUT4
ADD5 PARTN DATABASE OUTPUT5
DECOMP SDCMPS GINOFILE PARAM
DIAGONAL SMPYAD INPUT PARAMD
FBS SOLVE INPUTT1 PARAML
MATGEN TRNSP INPUTT2 PARAMR
MERGE UMERGE INPUTT3 PRTPARM
MPYAD UPARTN INPUTT4 SCALAR
INPUTT5 SEEMAT
LAMX SETVAL
MATGPR SWITCH
MATPRN TABPCH
MATPRT TABPRT
NORM TABPT
OUTPUT1 TIMETEST
OUTPUT2 VEC
OUTPUT3
User Modules (11) Executive Operation Modules (16)
(See Section 5.6) (See Section 5.7)
DDR MODA BEGIN FILE
DUMMOD1 MODB CHKPNT JUMP
DUMMOD2 MODC COMPOFF LABEL
DUMMOD3 OUTPUT COMPON PRECHK
DUMMOD4 XYPRNPLT COND PURGE
DUMMOD5 END REPT
EOUIV SAVE
EXIT XDMAP
Substructure DMAP ALTERs (22) Supplementary Functional Modules (2)
(See Section 5.9) (See Section 5.10)
BRECOVER PLOT EMA1 GPSPC
CHECK RECOVER
COMBINE REDUCE
CREDUCE RENAME
DELETE RESTORE
DESTROY RUN
DUMP SOFIN
EDIT SOFOUT
EQUIV SOFPRINT
MRECOVER SOLVE
MREDUCE SUBSTRUCTURE
Structurally Oriented Functional Modules (122)
(See Section 4 of the Programmer's Manual)
ADR EQMCK MRED1 SDRHT
ALG EXIO MRED2 SDR1
AMG FA1 MTRXIN SDR2
AMP FA2 NRLSUM SDR3
ANISOP FLBMG OFP SGEN
APD FRLG OPTPR1 SITEPLOT
APDB FRRD OPTPR2 SMA1
BMG FRRD2 PLA1 SMA2
CASE FVRSTR1 PLA2 SMA3
CASEGEN FVRSTR2 PLA3 SMP1
CEAD GENCOS PLA4 SMP2
CMRED2 GENPART PLOT SOFI
COMBUGV GFSMA PLTHBDY SOFO
COMB1 GI PLTMRG SOFUT
COMB2 GKAD PLTSET SSGHT
CURV GKAM PLTTRAN SSG1
CYCT1 GPCYC PROLATE SSG2
CYCT2 GPFDR PROMPT1 SSG3
DDAMAT GPSP PRTMSG SSG4
DDAMPG GPWG RANDOM SUBPH1
DDRMM GP1 RBMG1 TA1
DDR1 GP2 RBMG2 TRAILER
DDR2 GP3 R8MG3 TRD
DESVEL GP4 RBMG4 TRHT
DPD GUST RCOVR TRLG
DSCHK IFT RCOVR3 VARIAN
DSMG1 LOADPP READ VDR
DSMG2 MAGBDY REDUCE XYPLOT
EMA MCE1 RMG XYTRAN
EMFLD MCE2 SCAN
EMG MODACC SCE1
In the examples that accompany each description, the following notation is
used:
1. Upper case letters and special symbols in the DMAP calling sequence must
be punched as shown except for data block names, parameter names, and
label names, which are symbolic.
2. Lower case letters represent constants whose permissible values are
indicated in the descriptive text.
Due to the many possible forms which may be used when writing parameters, a
variety of arbitrarily selected forms will be used in the examples. This does
not imply that the form used in any example is required or that it is the only
acceptable form allowed.
The terms "form", "type", and "precision" are used in many functional
module descriptions. By form is meant one of the following:
Form Meaning
1 Square matrix
2 Rectangular matrix
6 Symmetric matrix
By type is meant one of the following:
Form Meaning
1 Real, single precision
2 Real, double precision
3 Complex, single precision
4 Complex, double precision
By precision is meant one of the following:
Precision IndicatorMeaning
1 Single precision numbers
2 Double precision numbers
=PAGE=
5.4 MATRIX OPERATION MODULES
Module Basic Operation Page
ADD [X] = a[A] + b[B] 5.4-2
ADD5 [X] = a[A] + b[B] + c[C] + d[D] + e[E] 5.4-4
DECOMP [A] => [L][U] 5.4-5
DIAGONAL Generate a diagonal matrix from a given matrix 5.4-6
(except rectangular and row vector)
-1
FBS [X] = +/- ([L][U]) [B] 5.4-7
MATGEN Generate certain kinds of matrices 5.4-?
Ú ¿
³ A11 ³ A12 ³
MERGE [A] <= ³ ÄÄÄÄÅÄÄÄÄ ³ 5.4-8
³ A21 ³ A22 ³
À Ù
T
MPYAD [X] = +/- [A][B] +/- [C] or +/- [A] [B] +/- C 5.4-10
T T
MPY3 [X] = [A] [B][A] + [C], [A] [B] + [C] or 5.4-12
[B][A] + [C]
Ú ¿
³ A11 ³ A12 ³
PARTN [A] => ³ ÄÄÄÄÅÄÄÄÄ ³ 5.4-13
³ A21 ³ A22 ³
À Ù
SDCMPS [A] => [L][U] 5.4-17
SMPYAD [X] = [A][B][C][D][E] +/- [F] 5.4-20
-1
SOLVE [X] = +/- [A] [B] 5.4-22
T
TRNSP [X] = [A] 5.4-23
Ú ¿
³ PHIA ³
UMERGE {PHIF} <= ³ ÄÄÄÄ ³ 5.4-24
³ PHIO ³
À Ù
Ú ¿
³ Kjj ³ Kjl ³
UPARTN [K ] = ³ ÄÄÄÄÅÄÄÄÄ ³ 5.4-26
ii ³ Klj ³ Kll ³
À Ù
=PAGE=
ADD - Matrix Add
Purpose
To compute [X] = a[A] + b[B] where a and b are scale factors.
DMAP Calling Sequence
ADD A,B / X / C,Y, ALPHA=(1.0,2.0) / C,Y, BETA=(3.0,4.0)