-
Notifications
You must be signed in to change notification settings - Fork 10
Programmer's Manual
The Programmer's Manual is currently a place to document the existing code base as it is audited and modernized. It also serves as a running commentary on ideas for modernization of the data structures as well as the code base in general.
- Make the minimum updates necessary to run all of the demonstration input.
- Modernize the program level code in the
mds
directory. Treat the code inmis
that compiles tolibnastran.a
as fixed to the greatest extent possible. There will be modifications from themds
level, for example data structures, that will drive changes in themis
code. But, the intent is not to initiate any modernization at themis
level. - Once the program level code is modernized, modernize the
organization and data structures in the
mis
code to use modern data structures, facilitate extensions, and use 3rd party libraries (i.e. linear algebra, OpenMP, OpenCL). - Extend and Improve
- Hollerith constants are used extensively throughout the code base and need to be replaced with characters.
- Integers are frequently used to store
CHARACTER*4
data and this is causing issues. It may be an issue with using a 64-bit compiler, but it might as well be fixed now. - Machine specific code needs to be replaced with platform independent code.
- Need to simplify memory management and replace custom management routines with standard Fortran 95 methods.
The legacy link instructions pull the block data objects out of the
NASTRAN library with ar
and compile them with the main program. This
was required so that the initialized data was preserved at the top
level. In NASTRAN-95, the block data files were moved to the BD
directory and compiled separately from the NASTRAN library. This
solution negated having to pull the objects out of the NASTRAN
library. The correct solution is to define the block data in modules
as the code is migrated to Fortran 95.
The machine constans are defined in subroutine btstrp
. The constants
are communicated using the following common blocks.
- SYSTEM
- LHPWX
- MACHIN
- CHMACH
The following subroutines should be reviewed when NASTRAN is ported to a new machine.
- PRTPRM
- SDCMPS
- SDR2E
- UPCASE
In common block MACHIN
, any subroutine that uses MACHX
instead of
MACH
contains machine constants that are used locally.
MACH | Hardware | OS | Supported |
---|---|---|---|
1 | DUMMY | NO | |
2 | IBM | MVS | YES |
3 | UNIVAC | FTN | NO |
4 | CDC | FTN5 | NO |
5 | DEC-VAX | VMS | YES |
6 | DEC-MIPS | ULTRIX | YES |
7 | SUN | SOLARIS | YES |
8 | IBM RS6000 | AIX | YES |
9 | HP | HP-UX | YES |
10 | SGI | IRIX | YES |
11 | MACINTOCH | NO | |
12 | CRAY | UNICOS | NO |
13 | CONVEX | NO | |
14 | NEC | NO | |
15 | FUJITSU | NO | |
16 | SUN | SUNOS | YES |
17 | AMDAHL | NO | |
18 | PRIME | NO | |
19 | PC | MS-DOS | NO |
20 | DUMMY | NO | |
21 | DEC-ALPHA | OPENVMS | YES |
22 | DEC-ALPHA | OSF | YES |
MACH | Hardware | OS | SYSBUF |
---|---|---|---|
1 | DUMMY | 200 | |
2 | IBM | MVS | 4100 |
3 | UNIVAC | FTN | 871 |
4 | CDC | FTN5 | 1042 |
5 | DEC-VAX | VMS | 1028 |
6 | DEC-MIPS | ULTRIX | 1028 |
7 | SUN | SOLARIS | 1028 |
8 | IBM RS6000 | AIX | 1028 |
9 | HP | HP-UX | 1028 |
10 | SGI | IRIX | 1028 |
11 | MACINTOCH | 1028 | |
12 | CRAY | UNICOS | 2052 |
13 | CONVEX | 1028 | |
14 | NEC | 2052 | |
15 | FUJITSU | 2052 | |
16 | SUN | SUNOS | 1028 |
17 | AMDAHL | 1028 | |
18 | PRIME | 1028 | |
19 | PC | MS-DOS | 1028 |
20 | DUMMY | 1028 | |
21 | DEC-ALPHA | OPENVMS | 1028 |
22 | DEC-ALPHA | OSF | 1028 |
- INTP : Fortran unit for input data
- OUTTAP : Fortran unit for printed output
MACH | Hardware | OS | INTP | OUTTAP |
---|---|---|---|---|
1 | DUMMY | 5 | 6 | |
2 | IBM | MVS | 5 | 6 |
3 | UNIVAC | FTN | 5 | 6 |
4 | CDC | FTN5 | 5 | 6 |
5 | DEC-VAX | VMS | 5 | 6 |
6 | DEC-MIPS | ULTRIX | 5 | 6 |
7 | SUN | SOLARIS | 5 | 6 |
8 | IBM RS6000 | AIX | 5 | 6 |
9 | HP | HP-UX | 5 | 6 |
10 | SGI | IRIX | 5 | 6 |
11 | MACINTOCH | 5 | 6 | |
12 | CRAY | UNICOS | 5 | 6 |
13 | CONVEX | 5 | 6 | |
14 | NEC | 5 | 6 | |
15 | FUJITSU | 5 | 6 | |
16 | SUN | SUNOS | 5 | 6 |
17 | AMDAHL | 5 | 6 | |
18 | PRIME | 5 | 6 | |
19 | PC | MS-DOS | 5 | 6 |
20 | DUMMY | 5 | 6 | |
21 | DEC-ALPHA | OPENVMS | 5 | 6 |
22 | DEC-ALPHA | OSF | 5 | 6 |
- NLPP : Number of lines printed per page
- NWPIC : Number of words per input card, used only in
XGPIBS
MACH | Hardware | OS | NLPP | NWPIC |
---|---|---|---|---|
1 | DUMMY | 50 | 0 | |
2 | IBM | MVS | 55 | 18 |
3 | UNIVAC | FTN | 42 | 8 |
4 | CDC | FTN5 | 55 | 18 |
5 | DEC-VAX | VMS | 55 | 18 |
6 | DEC-MIPS | ULTRIX | 55 | 18 |
7 | SUN | SOLARIS | 55 | 18 |
8 | IBM RS6000 | AIX | 55 | 18 |
9 | HP | HP-UX | 55 | 18 |
10 | SGI | IRIX | 55 | 18 |
11 | MACINTOCH | 55 | 18 | |
12 | CRAY | UNICOS | 55 | 9 |
13 | CONVEX | 55 | 18 | |
14 | NEC | 55 | 0 | |
15 | FUJITSU | 55 | 0 | |
16 | SUN | SUNOS | 55 | 0 |
17 | AMDAHL | 55 | 0 | |
18 | PRIME | 55 | 0 | |
19 | PC | MS-DOS | 55 | 0 |
20 | DUMMY | 55 | 0 | |
21 | DEC-ALPHA | OPENVMS | 55 | 18 |
22 | DEC-ALPHA | OSF | 55 | 0 |
- NBPC : Number of bits per character
- NBPW : Number of bits per word
MACH | Hardware | OS | NBPC | NBPW |
---|---|---|---|---|
1 | DUMMY | 6 | 36 | |
2 | IBM | MVS | 8 | 32 |
3 | UNIVAC | FTN | 9 | 36 |
4 | CDC | FTN5 | 6 | 60 |
5 | DEC-VAX | VMS | 8 | 32 |
6 | DEC-MIPS | ULTRIX | 8 | 32 |
7 | SUN | SOLARIS | 8 | 32 |
8 | IBM RS6000 | AIX | 8 | 32 |
9 | HP | HP-UX | 8 | 32 |
10 | SGI | IRIX | 8 | 32 |
11 | MACINTOCH | 8 | 32 | |
12 | CRAY | UNICOS | 8 | 64 |
13 | CONVEX | 8 | 32 | |
14 | NEC | 8 | 64 | |
15 | FUJITSU | 8 | 64 | |
16 | SUN | SUNOS | 8 | 32 |
17 | AMDAHL | 8 | 32 | |
18 | PRIME | 8 | 32 | |
19 | PC | MS-DOS | 8 | 32 |
20 | DUMMY | 8 | 32 | |
21 | DEC-ALPHA | OPENVMS | 8 | 32 |
22 | DEC-ALPHA | OSF | 8 | 32 |
- IPREC : Precision; single precision = 1; double precision = 2
- RECL : Direct file record length (used in Fortran
OPEN
statement); by words = 1; by byte = NCPW - QP :
REAL*16
precision flag; YES = 1; NO = 0
MACH | Hardware | OS | IPREC | RECL | QP |
---|---|---|---|---|---|
1 | DUMMY | 2 | 0 | 0 | |
2 | IBM | MVS | 2 | 4 | 0 |
3 | UNIVAC | FTN | 2 | 1 | 0 |
4 | CDC | FTN5 | 1 | 1 | 0 |
5 | DEC-VAX | VMS | 2 | 1 | 0 |
6 | DEC-MIPS | ULTRIX | 2 | 1 | 0 |
7 | SUN | SOLARIS | 2 | 4 | 0 |
8 | IBM RS6000 | AIX | 2 | 4 | 0 |
9 | HP | HP-UX | 2 | 4 | 0 |
10 | SGI | IRIX | 2 | 1 | 0 |
11 | MACINTOCH | 2 | 0 | 0 | |
12 | CRAY | UNICOS | 1 | 8 | 0 |
13 | CONVEX | 2 | 4 | 0 | |
14 | NEC | 1 | 0 | 0 | |
15 | FUJITSU | 1 | 0 | 0 | |
16 | SUN | SUNOS | 2 | 0 | 0 |
17 | AMDAHL | 2 | 0 | 0 | |
18 | PRIME | 2 | 0 | 0 | |
19 | PC | MS-DOS | 2 | 0 | 0 |
20 | DUMMY | 2 | 0 | 0 | |
21 | DEC-ALPHA | OPENVMS | 2 | 1 | 0 |
22 | DEC-ALPHA | OSF | 2 | 0 | 0 |
- LPCH : Fortran unit for punched output
- LDICT : Fortran unit for restart dictionary punch
MACH | Hardware | OS | LPCH | LDICT |
---|---|---|---|---|
1 | DUMMY | 7 | 3 | |
2 | IBM | MVS | 7 | 7 |
3 | UNIVAC | FTN | 1 | 3 |
4 | CDC | FTN5 | 7 | 7 |
5 | DEC-VAX | VMS | 1 | 4 |
6 | DEC-MIPS | ULTRIX | 1 | 4 |
7 | SUN | SOLARIS | 1 | 4 |
8 | IBM RS6000 | AIX | 1 | 4 |
9 | HP | HP-UX | 1 | 4 |
10 | SGI | IRIX | 1 | 4 |
11 | MACINTOCH | 1 | 4 | |
12 | CRAY | UNICOS | 1 | 4 |
13 | CONVEX | 1 | 4 | |
14 | NEC | 1 | 4 | |
15 | FUJITSU | 1 | 4 | |
16 | SUN | SUNOS | 1 | 4 |
17 | AMDAHL | 1 | 4 | |
18 | PRIME | 1 | 4 | |
19 | PC | MS-DOS | 1 | 4 |
20 | DUMMY | 1 | 4 | |
21 | DEC-ALPHA | OPENVMS | 1 | 4 |
22 | DEC-ALPHA | OSF | 1 | 4 |
Used only by RCARD
, RCARD2
, XRCARD
, and YRCARD
. Only HIGHPW
is specified, LOWPW = 1 - HIGHPW
.
MACH | Hardware | OS | HIGHPW |
---|---|---|---|
1 | DUMMY | 38 | |
2 | IBM | MVS | 75 |
3 | UNIVAC | FTN | 38 |
4 | CDC | FTN5 | 321 |
5 | DEC-VAX | VMS | 38 |
6 | DEC-MIPS | ULTRIX | 38 |
7 | SUN | SOLARIS | 38 |
8 | IBM RS6000 | AIX | 38 |
9 | HP | HP-UX | 38 |
10 | SGI | IRIX | 38 |
11 | MACINTOCH | 38 | |
12 | CRAY | UNICOS | 2465 |
13 | CONVEX | 38 | |
14 | NEC | 0 | |
15 | FUJITSU | 0 | |
16 | SUN | SUNOS | 0 |
17 | AMDAHL | 0 | |
18 | PRIME | 0 | |
19 | PC | MS-DOS | 0 |
20 | DUMMY | 0 | |
21 | DEC-ALPHA | OPENVMS | 38 |
22 | DEC-ALPHA | OSF | 0 |
NUDFLW : Floating number underflow control, used only by FQRW
and
FQRWV
MXFL : Maxinum files MAXFIL
can request via the NASTRAN
card, used only by NASCAR
MACH | Hardware | OS | NUDFLW | MXFL |
---|---|---|---|---|
1 | DUMMY | 16 | 50 | |
2 | IBM | MVS | 16 | 50 |
3 | UNIVAC | FTN | 18 | 49 |
4 | CDC | FTN5 | 14 | 75 |
5 | DEC-VAX | VMS | 8 | 75 |
6 | DEC-MIPS | ULTRIX | 16 | 75 |
7 | SUN | SOLARIS | 16 | 75 |
8 | IBM RS6000 | AIX | 16 | 75 |
9 | HP | HP-UX | 16 | 75 |
10 | SGI | IRIX | 16 | 75 |
11 | MACINTOCH | 16 | 75 | |
12 | CRAY | UNICOS | 16 | 75 |
13 | CONVEX | 16 | 75 | |
14 | NEC | 16 | 75 | |
15 | FUJITSU | 16 | 75 | |
16 | SUN | SUNOS | 16 | 75 |
17 | AMDAHL | 16 | 75 | |
18 | PRIME | 16 | 75 | |
19 | PC | MS-DOS | 16 | 75 |
20 | DUMMY | 16 | 75 | |
21 | DEC-ALPHA | OPENVMS | 9 | 75 |
22 | DEC-ALPHA | OSF | 16 | 75 |
KSHIFT : Shift counts used in a divide to convert a GINO LOC returned
from SAVPOS
to GINO block number, used in EMA
.
MACH | Hardware | OS | KSHIFT |
---|---|---|---|
1 | DUMMY | 1 | |
2 | IBM | MVS | 4096 |
3 | UNIVAC | FTN | 4096 |
4 | CDC | FTN5 | 262144 |
5 | DEC-VAX | VMS | 4096 |
6 | DEC-MIPS | ULTRIX | 4096 |
7 | SUN | SOLARIS | 4096 |
8 | IBM RS6000 | AIX | 4096 |
9 | HP | HP-UX | 4096 |
10 | SGI | IRIX | 4096 |
11 | MACINTOCH | 4096 | |
12 | CRAY | UNICOS | 4096 |
13 | CONVEX | 4096 | |
14 | NEC | 0 | |
15 | FUJITSU | 0 | |
16 | SUN | SUNOS | 0 |
17 | AMDAHL | 0 | |
18 | PRIME | 0 | |
19 | PC | MS-DOS | 0 |
20 | DUMMY | 0 | |
21 | DEC-ALPHA | OPENVMS | 4096 |
22 | DEC-ALPHA | OSF | 0 |
MTISA : Used on in SDCMPS
MACH | Hardware | OS | SP | DP |
---|---|---|---|---|
1 | DUMMY | 0 | 00 | |
2 | IBM | MVS | 24 | 26 |
3 | UNIVAC | FTN | 27 | 60 |
4 | CDC | FTN5 | 48 | 96 |
5 | DEC-VAX | VMS | 23 | 55 |
6 | DEC-MIPS | ULTRIX | 23 | 55 |
7 | SUN | SOLARIS | 23 | 52 |
8 | IBM RS6000 | AIX | 23 | 55 |
9 | HP | HP-UX | 23 | 55 |
10 | SGI | IRIX | 23 | 55 |
11 | MACINTOCH | 23 | 55 | |
12 | CRAY | UNICOS | 48 | 96 |
13 | CONVEX | 23 | 52 | |
14 | NEC | 48 | 96 | |
15 | FUJITSU | 48 | 96 | |
16 | SUN | SUNOS | 23 | 55 |
17 | AMDAHL | 23 | 55 | |
18 | PRIME | 23 | 55 | |
19 | PC | MS-DOS | 0 | 00 |
20 | DUMMY | 0 | 00 | |
21 | DEC-ALPHA | OPENVMS | 23 | 55 |
22 | DEC-ALPHA | OSF | 0 | 00 |
The File Control Block (FCB) is used by the NASTRAN program code in
the mds
directory. The main issue with the FCB
array is that it is
an integer array, but elements 13 and 14 are used to store character
data. The format of the FCB
was taken from the file mis/gnfiat.f
.
Fortran INTEGER FCB COMMON / FCB / FCB(17,MAXFCB)
Index | Description | Notes |
---|---|---|
1 | Open Flag (0 - Read, 1 - Write) | |
2 | Buffer Address | |
3 | Current Logical Record (CLR) | |
4 | Current Block Number | |
5 | First Block Number on External File | |
6 | Last Block Number on External File | |
7 | Number of Blocks Allocated to this File | |
8 | Flag for Writing the First Column on File (0-NO, 1-YES) | |
9 | Index to First In-Memory Block | |
10 | Index to Last In-Memory Block | |
11 | Index to Current In-Memory Block | |
12 | Original Buffer Address (ON Open) | |
13,14 | DMAP File Name | Implicit coercion of CHARACTER*4 data to each integer element |
15 | Open Flag for External File | |
16 | Total Number of Strings in this Matrix | |
17 | Total Number of Terms in this Matrix |
The MSGX
common block in the mis
directory causes a segmentation
fault trying to implicitly convert integer to character data in
SUBROUTINE MESAGE
. Fortran COMMON /MSGX / N,M,MSG(4,1)
Variable | Implicit Type | Data Type | Description |
---|---|---|---|
N | Integer | Integer | Current number of messages stored |
M | Integer | Integer | Maximum number possible |
MSG(1,I) | Integer | Integer | Number |
MSG(2,I) | Integer | Integer | Parameter |
MSG(3,I) | Integer | Character*4 |
Name(1:4) |
MSG(4,I) | Integer | Character*4 |
Name(5:8) |