File: conm2d.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (158 lines) | stat: -rw-r--r-- 4,037 bytes parent folder | download | duplicates (2)
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
      SUBROUTINE CONM2D
C
C THIS SUBROUTINE COMPUTES THE CONCENTRATED MASS ELEMENTS MASS MATRIX
C FOR THE M2 TYPE ELEMENT
C   DOUBLE PRECISION VERSION
C
C ECPTNO  NAME       TYPE  DESCRIPTION
C ******  ****       ****  ***********
C
C   1     IELID      I     ELEMENT ID
C   2     IGP        I     GRID POINT NUMBER
C   3     ICIDT2     I     COORDINATE SYSTEM ID FOR T2
C   4     MASS       R     LUMPED MASS
C   5     OFFSET(1)  R
C   6     OFFSET(2)  R     X,Y, AND Z COORDINATES OF THE
C   7     OFFSET(3)  R     OFFSET
C   8     MMI(1,1)   R
C   9     MMI(2,1)   R     MASS MOMENTS OF INERTIA
C  10     MMI(2,2)   R
C  11     MMI(3,1)   R
C  12     MMI(3,2)   R
C  13     MMI(3,3)   R
C  14     ICIDT1     I     COORDINATE SYSTEM ID FOR T1
C  15     X          R
C  16     Y          R
C  17     Z          R
C
      INTEGER DICT(11), ELID, ESTID, IECPT(14)
      DOUBLE PRECISION MM(36),TT(36),T(36),MB,XOF,YOF,ZOF,INER(6)
C
      COMMON /SYSTEM/ SS,IOUTPT,KSYSTM(56)
C
      COMMON /EMGEST/ ECPT(100)
C
      COMMON /EMGDIC/ DMM(2),NLOCS,ELID,ESTID
C
      COMMON /EMGPRM/ DUM(15),ISMB(3),IPREC,NOGO
C
      EQUIVALENCE (ECPT(1),IECPT(1),IELID)
      EQUIVALENCE (DICT(5),DICT5)
C
C     INITIALIZE
C
      IF (ISMB(2) .EQ. 0) RETURN
      DICT(1) = ESTID
      DICT(2) = 1
      DICT(3) = 6
      DICT(4) = 63
      DICT(5) = 0
      IP = IPREC
C
C  MOVE VARIABLES TO DOUBLE PRECISION LOCATIONS
C
      MB = ECPT(4)
      DO 50 I= 1,6
  50  INER(I)= ECPT(I+7)
C
C COMPUTE NON-TRANSFORMED MASS MATRIX.  INITIALIZE TO ZERO
C THEN FILL IN NON-ZERO TERMS
C
      DO 100 I=1,36
  100 MM(I) = 0.
C
      ICIDT2 = IECPT(3)
      IF (ICIDT2 .GE. 0) GO TO 120
      ICIDT2 = 0
      DO 110 I = 1,3
  110 ECPT (I+4) = ECPT(I+4) - ECPT(I+14)
C
  120 XOF = ECPT(5)
      YOF = ECPT(6)
      ZOF = ECPT(7)
      MM(1) = MB
      MM(5) = MB*ZOF
      MM(6) = -MB*YOF
      MM(8) = MB
      MM(10) = -MM(5)
      MM(12) = MB*XOF
      MM(15) = MB
      MM(16) = -MM(6)
      MM(17) = -MM(12)
      MM(20) = MM(10)
      MM(21) = MM(16)
      X2 = XOF**2
      Y2 = YOF**2
      Z2 = ZOF**2
      MM(22) = INER(1) + (Y2 + Z2)*MB
      MM(23) = -INER(2) + MM(6)*XOF
      MM(24) =  -INER(4)+MM(10)*XOF
      MM(25) = MM(5)
      MM(27) = MM(17)
      MM(28) = MM(23)
      MM(29) = INER(3) + (X2 + Z2)*MB
      MM(30) = -INER(5) + MM(6)*ZOF
      MM(31) = MM(6)
      MM(32) = MM(12)
      MM(34) = MM(24)
      MM(35) = MM(30)
      MM(36) = INER(6) + (X2 + Y2)*MB
C
      ICIDT1 = IECPT(14)
C
C PERFORM TRANSFORMATIONS.  IF CSIDS 1 AND 2 ARE EQUAL,
C T1 = T2 SO MASS MATRIX IS COMPLETE
C
      IF (ICIDT2 .EQ. ICIDT1) GO TO 240
C                            T
C NOT EQUAL SO COMPUTE T = (T )(T )
C                            1   2
C GET T1 AND T2 IF NEEDED
      IT = 18
      IF (ICIDT1 .EQ. 0) GO TO 130
C
      CALL TRANSD (ECPT(14),T(1))
      GO TO 140
C ONLY T2 NEEDED SO T = T2
  130 IT = 9
  140 IF (ICIDT2 .EQ. 0) GO TO 150
      ITEMP = IECPT(14)
      IECPT(14) = ICIDT2
      CALL TRANSD (ECPT(14),T(10))
      IECPT(14) = ITEMP
C
      IF(ICIDT1 .EQ. 0) GO TO 210
      CALL GMMATD (T(1),3,3,2, T(10),3,3,0, T(19))
      GO TO 210
C
C HERE T2 IS IDENTITY AND T1 IS AT T(1) SO
C T = T1 (TRANSPOSE).  SO INSERT INTO T
  150 DO 170 I = 1,3
      DO 170 J = 1,3
      IJ = 3*(I-1) + J
      JI = I + 3*(J-1) + 18
170   T(JI) = T(IJ)
C
C T = (T ) (T ) IS COMPLETE. INSERT IT IN THE 6X6 TRANSFORMATION MATRIX.
C       1    2
C
  210 DO 220 I = 1,36
  220 TT(I) = 0.
C
      DO 230 I = 1,3
      IJ = I + IT
      TT(I) = T(IJ)
      TT(I + 6) = T(IJ + 3)
      TT(I + 12) = T(IJ + 6)
      TT(I + 21) = T(IJ)
      TT(I + 27) = T(IJ + 3)
  230 TT(I + 33) = T(IJ + 6)
C           T
C FORM T*M*T  AND STORE IN MM
C
      CALL GMMATD (TT(1),6,6,0, MM(1),6,6,0, T(1))
      CALL GMMATD (T(1),6,6,0, TT(1),6,6,1, MM(1))
C
  240 CALL EMGOUT (MM,MM,36,1,DICT,2,IP)
      RETURN
      END