summaryrefslogtreecommitdiff
path: root/Trivac/src/TRIPMA.f
blob: de33a05a6f0d20a36dee9986945a8b2be30dbe3c (plain)
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
*DECK TRIPMA
      SUBROUTINE TRIPMA(LC,T,TS,Q,QS)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Compute the unit matrices for a primal finite element method in 3-D.
*
*Copyright:
* Copyright (C) 2002 Ecole Polytechnique de Montreal
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version
*
*Author(s): A. Hebert
*
*Parameters: input
* LC      order of the unit matrices.
* T       cartesian linear product vector.
* TS      cylindrical linear product vector.
* Q       cartesian stiffness matrix.
* QS      cylindrical stiffness matrix.
*
*-----------------------------------------------------------------------
*
*----
*  SUBROUTINE PARAMETERS
*----
      INTEGER LC,IJ1,IJ2,IJ3,ISR
      REAL T(LC),TS(LC),Q(LC,LC),QS(LC,LC)
*----
*  LOCAL VARIABLES
*----
      COMMON /ELEM2/LL,LCC,IJ1(125),IJ2(125),IJ3(125),ISR(6,25),
     1 Q3DP1(125,125),Q3DP2(125,125),Q3DP3(125,125),R3DP(125),
     2 Q3DC1(125,125),Q3DC2(125,125),Q3DC3(125,125),R3DC(125),
     3 R2DP(25),R2DC(25)
      SAVE /ELEM2/
*----
*  CALCULATION OF COMMON /ELEM2/
*----
      LCC=LC*LC
      LL=LC*LC*LC
      DO 5 L=1,LL
      L1=1+MOD(L-1,LC)
      L2=1+(L-L1)/LC
      L3=1+MOD(L2-1,LC)
      IJ1(L)=L1
      IJ2(L)=L3
      IJ3(L)=1+(L2-L3)/LC
    5 CONTINUE
*----
*  CALCULATION OF MATRIX ISR.
*----
      K1=0
      K2=0
      J1=0
      J2=0
      I1=0
      I2=0
      L=0
      DO 8 I=1,LC
      DO 7 J=1,LC
      DO 6 K=1,LC
      L=L+1
      IF(K.EQ.1) THEN
         K1=K1+1
         ISR(1,K1)=L
      ELSE IF(K.EQ.LC) THEN
         K2=K2+1
         ISR(2,K2)=L
      ENDIF
      IF(J.EQ.1) THEN
         J1=J1+1
         ISR(3,J1)=L
      ELSE IF(J.EQ.LC) THEN
         J2=J2+1
         ISR(4,J2)=L
      ENDIF
      IF(I.EQ.1) THEN
         I1=I1+1
         ISR(5,I1)=L
      ELSE IF(I.EQ.LC) THEN
         I2=I2+1
         ISR(6,I2)=L
      ENDIF
    6 CONTINUE
    7 CONTINUE
    8 CONTINUE
*----
*  CALCULATION OF 3-D MASS AND STIFFNESS MATRICES FROM TENSORIAL PRODUCT
*  OF 1-D MATRICES.
*----
      DO 20 I=1,LL
      I1=IJ1(I)
      I2=IJ2(I)
      I3=IJ3(I)
      DO 10 J=1,LL
      J1=IJ1(J)
      J2=IJ2(J)
      J3=IJ3(J)
      IF((I2.EQ.J2).AND.(I3.EQ.J3)) THEN
         Q3DP1(I,J)=Q(I1,J1)*T(I2)*T(I3)
         Q3DC1(I,J)=QS(I1,J1)*T(I2)*T(I3)
      ELSE
         Q3DP1(I,J)=0.0
         Q3DC1(I,J)=0.0
      ENDIF
      IF((I1.EQ.J1).AND.(I3.EQ.J3)) THEN
         Q3DP2(I,J)=T(I1)*Q(I2,J2)*T(I3)
         Q3DC2(I,J)=TS(I1)*Q(I2,J2)*T(I3)
      ELSE
         Q3DP2(I,J)=0.0
         Q3DC2(I,J)=0.0
      ENDIF
      IF((I1.EQ.J1).AND.(I2.EQ.J2)) THEN
         Q3DP3(I,J)=T(I1)*T(I2)*Q(I3,J3)
         Q3DC3(I,J)=TS(I1)*T(I2)*Q(I3,J3)
      ELSE
         Q3DP3(I,J)=0.0
         Q3DC3(I,J)=0.0
      ENDIF
   10 CONTINUE
      R3DP(I)=T(I1)*T(I2)*T(I3)
      R3DC(I)=TS(I1)*T(I2)*T(I3)
   20 CONTINUE
*----
*  CALCULATION OF 2-D MASS MATRICES FROM TENSORIAL PRODUCT OF 1-D
*  MATRICES.
*----
      DO 30 I=1,LC*LC
      I1=IJ1(I)
      I2=IJ2(I)
      R2DP(I)=T(I1)*T(I2)
      R2DC(I)=TS(I1)*T(I2)
   30 CONTINUE
      RETURN
      END