37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "mvsiz_p.inc"
45
46
47
48#include "com08_c.inc"
49#include "param_c.inc"
50#include "impl1_c.inc"
51
52
53
54 INTEGER, INTENT(IN) :: NEL
55 INTEGER NC1(MVSIZ),NC2(MVSIZ),NC3(MVSIZ),PID(MVSIZ)
57 . r(3,*), geo(npropg,*),
58 . offg(*),off(*),al(mvsiz),exx(mvsiz),exy(mvsiz),exz(mvsiz),
59 . kxx(mvsiz),kyy(mvsiz),kzz(mvsiz),rx1g(mvsiz),rx2g(mvsiz),
60 . ry1g(mvsiz),ry2g(mvsiz),rz1g(mvsiz),rz2g(mvsiz),
61 . rx1(mvsiz),rx2(mvsiz),ry1(mvsiz),ry2(mvsiz),rz1(mvsiz),rz2(mvsiz),
62 . e1x(mvsiz),e1y(mvsiz),e1z(mvsiz),e2x(mvsiz),e2y(mvsiz),
63 . e2z(mvsiz),e3x(mvsiz),e3y(mvsiz),e3z(mvsiz)
64
65
66
67 INTEGER I, IG, IRX, IR1Y, IR1Z,
68 . IR2Y, IR2Z, IRY, IRZ, J
70 . rxav(mvsiz), ryav(mvsiz), rzav(mvsiz),exx00(mvsiz), exy00(mvsiz),
71 . exz00(mvsiz), exy0(mvsiz), exz0(mvsiz),rz10(mvsiz),
72 . ry10(mvsiz), rz20(mvsiz), ry20(mvsiz), exx00phi,exy00phi,
73 . exz00phi, exy0phi, exz0phi, rx10phi, ry10phi, rz10phi,
74 . rx20phi, ry20phi, rz20phi,off_l,dt05
75
76 DO i=1,nel
77 rx1(i)=e1x(i)*rx1g(i)+e1y(i)*ry1g(i)+e1z(i)*rz1g(i)
78 ry1(i)=e2x(i)*rx1g(i)+e2y(i)*ry1g(i)+e2z(i)*rz1g(i)
79 rz1(i)=e3x(i)*rx1g(i)+e3y(i)*ry1g(i)+e3z(i)*rz1g(i)
80 rx2(i)=e1x(i)*rx2g(i)+e1y(i)*ry2g(i)+e1z(i)*rz2g(i)
81 ry2(i)=e2x(i)*rx2g(i)+e2y(i)*ry2g(i)+e2z(i)*rz2g(i)
82 rz2(i)=e3x(i)*rx2g(i)+e3y(i)*ry2g(i)+e3z(i)*rz2g(i)
83 ENDDO
84
85
86
87 dt05=half*dt1
88 IF (impl_s > 0 .AND. ismdisp > 0) dt05=zero
89
90 DO i=1,nel
91 rxav(i)= half*dt05*(rx1(i)+rx2(i))
92 exx00(i)=exx(i)
93 exy00(i)=exy(i)
94 exz00(i)=exz(i)
95
96 exy0(i)=dt05*exy(i)
97 exz0(i)=dt05*exz(i)
98 exx(i)=exx(i)-(exy0(i)*exy00(i)+exz0(i)*exz00(i))
99 exy(i)=exy(i)+exz0(i)*exx00(i)
100 exz(i)=exz(i)+exy0(i)*exx00(i)
101 rz10(i)=rz1(i)
102 ry10(i)=ry1(i)
103 rz20(i)=rz2(i)
104 ry20(i)=ry2(i)
105 rx1(i)=rx1(i)-exy0(i)*ry10(i)-exz0(i)*rz10(i)
106 ry1(i)=ry1(i)-rxav(i)*(rz10(i)-exy(i))
107 rz1(i)=rz1(i)+rxav(i)*(ry10(i)+exz(i))
108 rx2(i)=rx2(i)-exy0(i)*ry20(i)-exz0(i)*rz20(i)
109 ry2(i)=ry2(i)-rxav(i)*(rz20(i)-exy(i))
110 rz2(i)=rz2(i)+rxav(i)*(ry20(i)+exz(i))
111 ENDDO
112
113
114
115 DO i=1,nel
116 ig=pid(i)
117 irx =nint(geo(7 ,ig))
118 ir1y=nint(geo(8 ,ig))
119 ir1z=nint(geo(9 ,ig))
120 ir2y=nint(geo(10,ig))
121 ir2z=nint(geo(11,ig))
122 iry =
min(1,ir1y+ir2y)
123 irz =
min(1,ir1z+ir2z)
124 rx1(i)=rx1(i)*irx
125 ry1(i)=ry1(i)*iry
126 rz1(i)=rz1(i)*irz
127 rx2(i)=rx2(i)*irx
128 ry2(i)=ry2(i)*iry
129 rz2(i)=rz2(i)*irz
130 exz(i)=exz(i)*iry
131 exy(i)=exy(i)*irz
132
133 ry1(i)=ir1y*ry1(i)
134 + -(one -ir1y)*(three_half*exz(i)+half*ry2(i))
135 ry2(i)=ir2y*ry2(i)
136 + -(one -ir2y)*(three_half*exz(i)+half*ry1(i))
137 rz1(i)=ir1z*rz1(i)
138 + +(one-ir1z)*(three_half*exy(i)-half*rz2(i))
139 rz2(i)=ir2z*rz2(i)
140 + +(one -ir2z)*(three_half*exy(i)-half*rz1(i))
141 ENDDO
142
143 DO i=1,nel
144 kxx(i)=(rx2(i)-rx1(i))/al(i)
145 kyy(i)=(ry2(i)-ry1(i))/al(i)
146 kzz(i)=(rz2(i)-rz1(i))/al(i)
147 ENDDO
148
149 DO i=1,nel
150 rxav(i)=rx1(i)+rx2(i)
151 rzav(i)=rz1(i)+rz2(i)
152 ryav(i)=ry1(i)+ry2(i)
153 ENDDO
154
155 DO i=1,nel
156 exz(i)=exz(i) + half*ryav(i)
157 exy(i)=exy(i) - half*rzav(i)
158 ENDDO
159
160
161
162 off_l = zero
163 DO i=1,nel
164 off(i) =
min(one,abs(offg(i)))
165 off(i) =
max(zero,off(i))
166 off_l =
min(off_l,offg(i))
167 ENDDO
168 IF (off_l < zero) THEN
169 DO i=1,nel
170 IF (offg(i) < zero) THEN
171 exx(i)=zero
172 exz(i)=zero
173 exy(i)=zero
174 kxx(i)=zero
175 kyy(i)=zero
176 kzz(i)=zero
177 ENDIF
178 ENDDO
179 ENDIF
180
181 RETURN