43
44
45
46#include "implicit_f.inc"
47#include "comlock.inc"
48
49
50
51#include "mvsiz_p.inc"
52
53
54
55#include "units_c.inc"
56#include "scr17_c.inc"
57#include "impl1_c.inc"
58
59
60
61 INTEGER, INTENT(IN) :: NEL
62
63
65 . off(*),offg(*),ksi,eta,zeta,wi,voln(*),
66 . a11(mvsiz), a12(mvsiz), a13(mvsiz),
67 . a21(mvsiz), a22(mvsiz), a23(mvsiz),
68 . a31(mvsiz), a32(mvsiz), a33(mvsiz)
69 DOUBLE PRECISION
70 . VOLDP(*)
71
72
73
74 INTEGER NGL(*), I, J ,ICOR,ep
75
76
78 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
79 . x5(mvsiz), x6(mvsiz), x7(mvsiz), x8(mvsiz),
80 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
81 . y5(mvsiz), y6(mvsiz), y7(mvsiz), y8(mvsiz),
82 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
83 . z5(mvsiz), z6(mvsiz), z7(mvsiz), z8(mvsiz),vol(mvsiz)
84
85 DOUBLE PRECISION RI(8),SI(8),TI(8),DN_R(8),DN_S(8),DN_T(8),
86 . DX_R,DX_S,DX_T,DY_R,DY_S,DY_T,DZ_R,DZ_S,DZ_T,DETM1,
87 . DETJ(MVSIZ),INVJ(9,MVSIZ),
88 . DN_X(,8),DN_Y(MVSIZ,8),DN_Z(MVSIZ,8),C(6,6,MVSIZ),DETDP
89
90
91 DATA ri /-1.0, -1.0, 1.0, 1.0,-1.0, -1.0, 1.0, 1.0/
92 DATA si /-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0/
93 DATA ti /-1.0, 1.0, 1.0, -1.0,-1.0, 1.0, 1.0,-1.0/
94
95
96 DO i=1,8
97 dn_r(i) = ri(i)*(one+ksi*ti(i))*(one+zeta*si(i))/eight
98 dn_s(i) = si(i)*(one+ksi*ti(i))*(one+eta*ri(i))/eight
99 dn_t(i) = ti(i)*(one+eta*ri(i))*(one+zeta*si(i))/eight
100 ENDDO
101
102 DO i=1,nel
103 dx_r = x1(i)*dn_r(1)+x2(i)*dn_r(2)+x3(i)*dn_r(3)+x4(i)*dn_r(4)
104 . +x5(i)*dn_r(5)+x6(i)*dn_r(6)+x7(i)*dn_r(7)+x8(i)*dn_r(8)
105 dx_s = x1(i)*dn_s(1)+x2(i)*dn_s(2)+x3(i)*dn_s(3)+x4(i)*dn_s(4)
106 . +x5(i)*dn_s(5)+x6(i)*dn_s(6)+x7(i)*dn_s(7)+x8(i)*dn_s(8)
107 dx_t = x1(i)*dn_t(1)+x2(i)*dn_t(2)+x3(i)*dn_t(3)+x4(i)*dn_t(4)
108 . +x5(i)*dn_t(5)+x6(i)*dn_t(6)+x7(i)*dn_t(7)+x8(i)*dn_t(8)
109
110 dy_r = y1(i)*dn_r(1)+y2(i)*dn_r(2)+y3(i)*dn_r(3)+y4(i)*dn_r(4)
111 . +y5(i)*dn_r(5)+y6(i)*dn_r(6)+y7(i)*dn_r(7)+y8(i)*dn_r(8)
112 dy_s = y1(i)*dn_s(1)+y2(i)*dn_s(2)+y3(i)*dn_s(3)+y4(i)*dn_s(4)
113 . +y5(i)*dn_s(5)+y6(i)*dn_s(6)+y7(i)*dn_s(7)+y8(i)*dn_s(8)
114 dy_t = y1(i)*dn_t(1)+y2(i)*dn_t(2)+y3(i)*dn_t(3)+y4(i)*dn_t(4)
115 . +y5(i)*dn_t(5)+y6(i)*dn_t(6)+y7(i)*dn_t(7)+y8(i)*dn_t(8)
116
117 dz_r = z1(i)*dn_r(1)+z2(i)*dn_r(2)+z3(i)*dn_r(3)+z4(i)*dn_r(4)
118 . +z5(i)*dn_r(5)+z6(i)*dn_r(6)+z7(i)*dn_r(7)+z8(i)*dn_r(8)
119 dz_s = z1(i)*dn_s(1)+z2(i)*dn_s(2)+z3(i)*dn_s(3)+z4(i)*dn_s(4)
120 . +z5(i)*dn_s(5)+z6(i)*dn_s(6)+z7(i)*dn_s(7)+z8(i)*dn_s(8)
121 dz_t = z1(i)*dn_t(1)+z2(i)*dn_t(2)+z3(i)*dn_t(3)+z4(i)*dn_t(4)
122 . +z5(i)*dn_t(5)+z6(i)*dn_t(6)+z7(i)*dn_t(7)+z8(i)*dn_t(8)
123
124 detdp = dx_r*(dy_s*dz_t-dz_s*dy_t)
125 . -dx_s*(dy_r*dz_t-dy_t*dz_r)
126 . +dx_t*(dy_r*dz_s-dy_s*dz_r)
127 detj(i) = detdp
128 voldp(i) = wi*detdp
129
130 IF (detj(i) > zero)THEN
131 detm1 = one/detj(i)
132
133 invj(1,i) = (dy_s*dz_t-dz_s*dy_t)*detm1
134 invj(2,i) = (dz_r*dy_t-dy_r*dz_t)*detm1
135 invj(3,i) = (dy_r*dz_s-dy_s*dz_r)*detm1
136 invj(4,i) = (dx_t*dz_s-dx_s*dz_t)*detm1
137 invj(5,i) = (dx_r*dz_t-dx_t*dz_r)*detm1
138 invj(6,i) = (dx_s*dz_r-dx_r*dz_s)*detm1
139 invj(7,i) = (dx_s*dy_t-dx_t*dy_s)*detm1
140 invj(8,i) = (dx_t*dy_r-dx_r*dy_t)*detm1
141 invj(9,i) = (dx_r*dy_s-dx_s*dy_r)*detm1
142 ELSE
143
144 ENDIF
145
146 a11(i) = dx_t
147 a12(i) = dy_t
148 a13(i) = dz_t
149 a21(i) = dx_r
150 a22(i) = dy_r
151 a23(i) = dz_r
152 a31(i) = dx_s
153 a32(i) = dy_s
154 a33(i) = dz_s
155 ENDDO
156
157 DO j=1,8
158 DO i=1,nel
159 dn_x(i,j) = dn_r(j)*invj(1,i)+dn_s(j)*invj(2,i)+dn_t(j)*invj(3,i)
160 dn_y(i,j) = dn_r(j)*invj(4,i)+dn_s(j)*invj(5,i)+dn_t(j)*invj(6,i)
161 dn_z(i,j) = dn_r(j)*invj(7,i)+dn_s(j)*invj(8,i)+dn_t(j)*invj(9,i)
162 ENDDO
163 ENDDO
164
165 icor = 0
166 DO i=1,nel
167 off(i)=offg(i)
168 IF(off(i)==zero)THEN
169 detj(i)=one
170 IF (voldp(i)<=zero) voldp(i)=one
171 ELSEIF (voldp(i)<=zero ) THEN
172 voldp(i)= em20
173 off(i) =zero
174 icor=1
175 ENDIF
176 ENDDO
177
178 IF (icor>0.AND.impl_s>0) THEN
179 DO i=1,nel
180 IF(voldp(i)<=zero.AND.off(i)/=zero)THEN
181 voldp(i)= em20
182 off(i) =zero
183 IF (imp_chk>0) THEN
184#include "lockon.inc"
185 WRITE(iout ,2001) ngl(i)
186#include "lockoff.inc"
187 idel7nok = 1
188 imp_ir = imp_ir + 1
189 ELSEIF (imconv==1) THEN
190#include "lockon.inc"
191 WRITE(istdo,2000) ngl(i)
192 WRITE(iout ,2000) ngl(i)
193#include "lockoff.inc"
194 idel7nok = 1
195 ENDIF
196 ENDIF
197 ENDDO
198 END IF
199
200 DO i=1,nel
201 voln(i) = voldp(i)
202 ENDDO
203
204
205
206 2000 FORMAT(/' ZERO OR NEGATIVE SUB-VOLUME : DELETE 3D-ELEMENT NB',
207 . i10/)
208 2001 FORMAT(/' ZERO OR NEGATIVE SOLID SUB-VOLUME : ELEMENT NB:',
209 . i10/)
210 RETURN