41
42
43
45
46
47
48#include "implicit_f.inc"
49#include "comlock.inc"
50
51
52
53#include "mvsiz_p.inc"
54
55
56
57#include "units_c.inc"
58#include "scr17_c.inc"
59#include "impl1_c.inc"
60
61
62
63 INTEGER, INTENT(IN) :: NEL
64 INTEGER NNEGA,INDEX(*),IPT
65
67 . offg(*),ksi,eta,zeta,wi,
68 . hx(mvsiz,4), hy(mvsiz,4), hz(mvsiz,4),
69 . cj1(*),cj2(*),cj3(*),
70 . cj4(*),cj5(*),cj6(*),
71 . cj7(*),cj8(*),cj9(*),
72 . jac1(*),jac2(*),jac3(*),
73 . jac4(*),jac5(*),jac6(*),
74 . jaci1(*),jaci2(*),jaci3(*),
75 . jaci4(*),jaci5(*),jaci6(*),
76 . jaci7(*),jaci8(*),jaci9(*)
77 DOUBLE PRECISION
78 . VOLDP(*)
79
80
81
82 INTEGER NGL(*), I, J ,ICOR
83
84
86 . det(mvsiz) ,dett ,
87 . jac_59_68(mvsiz), jac_67_49(mvsiz), jac_48_57(mvsiz),
88 . jac_38_29(mvsiz), jac_19_37(mvsiz), jac_27_18(mvsiz),
89 . jac_26_35(mvsiz), jac_34_16(mvsiz), jac_15_24(mvsiz),
90 . jac7,jac8,jac9,vol(mvsiz)
91 DOUBLE PRECISION
92 . DETDP
93
94 DO i=1,nel
95 jac1(i)=cj1(i)+hx(i,3)*eta+(hx(i,2)+hx(i,4)*eta)*zeta
96 jac2(i)=cj2(i)+hy(i,3)*eta+(hy(i,2)+hy(i,4)*eta)*zeta
97 jac3(i)=cj3(i)+hz(i,3)*eta+(hz(i,2)+hz(i,4)*eta)*zeta
98
99 jac4(i)=cj4(i)+hx(i,1)*zeta+(hx(i,3)+hx(i,4)*zeta)*ksi
100 jac5(i)=cj5(i)+hy(i,1)*zeta+(hy(i,3)+hy(i,4)*zeta)*ksi
101 jac6(i)=cj6(i)+hz(i,1)*zeta+(hz(i,3)+hz(i,4)*zeta)*ksi
102
103 jac7=cj7(i)+hx(i,2)*ksi+(hx(i,1)+hx(i,4)*ksi)*eta
104 jac8=cj8(i)+hy(i,2)*ksi+(hy(i,1)+hy(i,4)*ksi)*eta
105 jac9=cj9(i)+hz(i,2)*ksi+(hz(i,1)+hz(i,4)*ksi)*eta
106
107
108
109 jac_59_68(i)=jac5(i)*jac9-jac6(i)*jac8
110 jac_67_49(i)=jac6(i)*jac7-jac4(i)*jac9
111 jac_38_29(i)=(-jac2(i)*jac9+jac3(i)*jac8)
112 jac_19_37(i)=( jac1(i)*jac9-jac3(i)*jac7)
113 jac_27_18(i)=(-jac1(i)*jac8+jac2(i)*jac7)
114 jac_26_35(i)=( jac2(i)*jac6(i)-jac3(i)*jac5(i))
115 jac_34_16(i)=(-jac1(i)*jac6(i)+jac3(i)*jac4(i))
116 jac_15_24(i)=( jac1(i)*jac5(i)-jac2(i)*jac4(i))
117 jac_48_57(i)=jac4(i)*jac8-jac5(i)*jac7
118 ENDDO
119
120 DO i=1,nel
121 detdp=one_over_512*(jac1(i)*jac_59_68(i)+jac2(i)*jac_67_49(i)+jac3(i)*jac_48_57(i))
122 det(i) = detdp
123 voldp(i) = wi * detdp
124 vol(i) = voldp(i)
125 ENDDO
126
127 icor = 0
128 DO i=1,nel
129 IF(offg(i)==zero)THEN
130 det(i)=one
131 IF (vol(i)<=zero) vol(i)=one
132 IF (voldp(i)<=zero) voldp(i)=one
133 ELSEIF (vol(i)<=zero ) THEN
134 icor=1
135 ENDIF
136 ENDDO
137 IF (icor>0.AND.inconv==1) THEN
138 DO i=1,nel
139 IF (offg(i) /= two.AND.offg(i) /= zero ) THEN
140 nnega=nnega+1
141 index(nnega)=i
142 offg(i) = two
143 END IF
144 ENDDO
145 END IF
146
147 IF (icor>0.AND.impl_s>0) THEN
148 DO i=1,nel
149 IF(vol(i)<=zero)THEN
150 vol(i)= em20
151 voldp(i) = em20
152 det(i)= em20
153 IF (imp_chk>0) THEN
154#include "lockon.inc"
155 WRITE(iout ,2001) ngl(i)
156#include "lockoff.inc"
157 idel7nok = 1
158 imp_ir = imp_ir + 1
159 ENDIF
160 ENDIF
161 ENDDO
162 END IF
163
164 DO i=1,nel
165 dett=one_over_512/det(i)
166 jaci1(i)=dett*jac_59_68(i)
167 jaci4(i)=dett*jac_67_49(i)
168 jaci7(i)=dett*jac_48_57(i)
169 jaci2(i)=dett*jac_38_29(i)
170 jaci5(i)=dett*jac_19_37(i)
171 jaci8(i)=dett*jac_27_18(i)
172 jaci3(i)=dett*jac_26_35(i)
173 jaci6(i)=dett*jac_34_16(i)
174 jaci9(i)=dett*jac_15_24(i)
175 ENDDO
176
177 RETURN
178 2001 FORMAT(/' ZERO OR NEGATIVE SOLID SUB-VOLUME : ELEMENT NB:',
179 . i10/)