35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "mvsiz_p.inc"
43
44
45
46 INTEGER, INTENT (IN) :: NEL
47 INTEGER, INTENT (OUT) :: IFCTL
48 INTEGER, DIMENSION(MVSIZ),INTENT (INOUT) :: IFC1
49 my_real,
DIMENSION(MVSIZ),
INTENT (INOUT) :: stif
50 my_real,
DIMENSION(MVSIZ),
INTENT (IN) :: fld ,
51 4 vx1, vx2, vx3, vx4,
52 6 vy1, vy2, vy3, vy4,
53 8 vz1, vz2, vz3, vz4
54 my_real,
DIMENSION(MVSIZ,3),
INTENT (IN) :: vc
55 my_real,
DIMENSION(MVSIZ,3),
INTENT (INOUT) ::
56 . for_t1, for_t2, for_t3, for_t4
57 my_real,
INTENT (IN) :: tol_v,mu,dt1
58 my_real,
DIMENSION(NEL),
INTENT (INOUT) :: e_distor
59
60
61
62
63
64
65 INTEGER I
66
68 . fac,vnj(4),vl,tol_v2,
69 . v2max,vc2,vref(mvsiz,3),vr2
70
71 tol_v2 = tol_v*tol_v
72 ifctl = 0
73 DO i=1,nel
74 vc2 = vc(i,1)*vc(i,1)+vc(i,2)*vc(i,2)+vc(i,3)*vc(i,3)
75 IF (vc2 <em20.OR.stif(i)==zero) cycle
76 vl = tol_v2*vc2
77 vnj(1) = vx1(i)*vx1(i) + vy1(i)*vy1(i) + vz1(i)*vz1(i)
78 vnj(2) = vx2(i)*vx2(i) + vy2(i)*vy2(i) + vz2(i)*vz2(i)
79 vnj(3) = vx3(i)*vx3(i) + vy3(i)*vy3(i) + vz3(i)*vz3(i)
80 vnj(4) = vx4(i)*vx4(i) + vy4(i)*vy4(i) + vz4(i)*vz4(i)
81 v2max =
max(vnj(1),vnj(2),vnj(3),vnj(4))
82 vr2 =
min(vnj(1),vnj(2),vnj(3),vnj(4))
83 vl = tol_v2*vr2
84 IF (vr2 == vnj(1)) THEN
85 vref(i,1) = vx1(i)
86 vref(i,2) = vy1(i)
87 vref(i,3) = vz1(i)
88 ELSE IF (vr2 == vnj(2)) THEN
89 vref(i,1) = vx2(i)
90 vref(i,2) = vy2(i)
91 vref(i,3) = vz2(i)
92 ELSE IF (vr2 == vnj(3)) THEN
93 vref(i,1) = vx3(i)
94 vref(i,2) = vy3(i)
95 vref(i,3) = vz3(i)
96 ELSE
97 vref(i,1) = vx4(i)
98 vref(i,2) = vy4(i)
99 vref(i,3) = vz4(i)
100 END IF
101 IF (v2max > vl) ifc1(i) = 1
102 IF (ifc1(i) > 0) ifctl=1
103 END DO
104
105 IF (ifctl==1) THEN
106 fac = one + two*mu
107 DO i=1,nel
108 IF (ifc1(i)==0) cycle
109 for_t1(i,1) = for_t1(i,1) - fld(i)*(vx1(i)-vref(i,1))
110 for_t1(i,2) = for_t1(i,2) - fld(i)*(vy1(i)-vref(i,2))
111 for_t1(i,3) = for_t1(i,3) - fld(i)*(vz1(i)-vref(i,3))
112 for_t2(i,1) = for_t2(i,1) - fld(i)*(vx2(i)-vref(i,1))
113 for_t2(i,2) = for_t2(i,2) - fld(i)*(vy2(i)-vref(i,2))
114 for_t2(i,3) = for_t2(i,3) - fld(i)*(vz2(i)-vref(i,3))
115 for_t3(i,1) = for_t3(i,1) - fld(i)*(vx3(i)-vref(i,1))
116 for_t3(i,2) = for_t3(i,2) - fld(i)*(vy3(i)-vref(i,2))
117 for_t3(i,3) = for_t3(i,3) - fld(i)*(vz3(i)-vref(i,3))
118 for_t4(i,1) = for_t4(i,1) - fld(i)*(vx4(i)-vref(i,1))
119 for_t4(i,2) = for_t4(i,2) - fld(i)*(vy4(i)-vref(i,2))
120 for_t4(i,3) = for_t4(i,3) - fld(i)*(vz4(i)-vref(i,3))
121 stif(i) = fac*stif(i)
122 e_distor(i)=e_distor(i)- dt1*(for_t1(i,1)*(vx1(i)-vref(i,1))+
123 . for_t1(i,2)*(vy1(i)-vref(i,2))+
124 . for_t1(i,3)*(vz1(i)-vref(i,3))+
125 . for_t2(i,1)*(vx2(i)-vref(i,1))+
126 . for_t2(i,2)*(vy2(i)-vref(i,2))+
127 . for_t2(i,3)*(vz2(i)-vref(i,3))+
128 . for_t3(i,1)*(vx3(i)-vref(i,1))+
129 . for_t3(i,2)*(vy3(i)-vref(i,2))+
130 . for_t3(i,3)*(vz3(i)-vref(i,3))+
131 . for_t4(i,1)*(vx4(i)-vref(i,1))+
132 . for_t4(i,2)*(vy4(i)-vref(i,2))+
133 . for_t4(i,3)*(vz4(i)-vref(i,3)))
134 ENDDO
135 END IF
136
137 RETURN