34
35
36
37 USE visc_param_mod
38
39
40
41#include "implicit_f.inc"
42
43
44
45 INTEGER ,INTENT(IN) :: NEL,NVARVIS,NPRONY
46 INTEGER ,INTENT(IN) :: NVAR_DAMP
48 . timestep
50 . rho(nel),
51 . epspxx(nel),epspyy(nel),epspzz(nel),
52 . epspxy(nel),epspyz(nel),epspzx(nel),
53 . sv1(nel),sv2(nel),sv3(nel),sv4(nel),sv5(nel),sv6(nel)
54 TYPE() ,INTENT(IN) :: VISC
55
56
57
59 . viscmax(nel),soundsp(nel)
60
61
62
63 my_real ,
INTENT(INOUT) :: uvarvis(nel,nvarvis)
64
65
66
67 INTEGER I,J,II,IMOD
69 . kv0,g,dav
70 my_real,
DIMENSION(NEL) :: p,epxx,epyy,epzz,trace
72 . aa(nprony),bb(nprony),gv(nprony),beta(nprony),h0(6),h(6),
73 . aak(nprony),bbk(nprony),betak(nprony),kv(nprony),hp0,
74 . rbulk,hp
75
76 g = zero
77 rbulk = zero
78 imod = visc%IPARAM(2)
79 kv0 = visc%UPARAM(1)
80 viscmax(1:nel) = zero
81
82 DO j=1,nprony
83 gv(j) = visc%UPARAM(1 + j)
84 beta(j) = visc%UPARAM(1 + j + nprony )
85 kv(j) = visc%UPARAM(1 + j + nprony*2)
86 betak(j) = visc%UPARAM(1 + j + nprony*3)
87 g = g + gv(j)
88 rbulk = rbulk + kv(j)
89 aa(j) = exp(-beta(j)*timestep)
90 bb(j) = two*timestep*gv(j)*exp(-half*beta(j)*timestep)
91
92 aak(j) = exp(-betak(j)*timestep)
93 bbk(j) = timestep*kv(j)*exp(-half*betak(j)*timestep)
94 ENDDO
95
96 IF(imod > 0) THEN
97 DO i=1,nel
98
99 trace(i) = -(epspxx(i) + epspyy(i) + epspzz(i))
100 dav = third*trace(i)
101 p(i) = zero
102
103
104 epxx(i) = epspxx(i) + dav
105 epyy(i) = epspyy(i) + dav
106 epzz(i) = epspzz(i) + dav
107
108 sv1(i) = zero
109 sv2(i) = zero
110 sv3(i) = zero
111 sv4(i) = zero
112 sv5(i) = zero
113 sv6(i) = zero
114 ENDDO
115
116 DO j= 1,nprony
117 ii = (j-1)*(nvarvis-nvar_damp)/nprony
118 DO i=1,nel
119
120 h0(1) = uvarvis(i,ii + 1)
121 h0(2) = uvarvis(i,ii + 2)
122 h0(3) = uvarvis(i,ii + 3)
123 h0(4) = uvarvis(i,ii + 4)
124 h0(5) = uvarvis(i,ii + 5)
125 h0(6) = uvarvis(i,ii + 6)
126 hp0 = uvarvis(i,ii + 7)
127
128 h(1) = aa(j)*h0(1) + bb(j)*epxx(i)
129 h(2) = aa(j)*h0(2) + bb(j)*epyy(i)
130 h(3) = aa(j)*h0(3) + bb(j)*epzz(i)
131 h(4) = aa(j)*h0(4) + half*bb(j)*epspxy(i)
132 h(5) = aa(j)*h0(5) + half*bb(j)*epspyz(i)
133 h(6) = aa(j)*h0(6) + half*bb(j)*epspzx(i)
134 hp = aak(j)*hp0 + bbk(j)*trace(i)
135
136 uvarvis(i,ii + 1) = h(1)
137 uvarvis(i,ii + 2) = h(2)
138 uvarvis(i,ii + 3) = h(3)
139 uvarvis(i,ii + 4) = h(4)
140 uvarvis(i,ii + 5) = h(5)
141 uvarvis(i,ii + 6) = h(6)
142 uvarvis(i,ii + 7) = hp
143
144 sv1(i) = sv1(i) + h(1)
145 sv2(i) = sv2(i) + h(2)
146 sv3(i) = sv3(i) + h(3)
147 sv4(i) = sv4(i) + h(4)
148 sv5(i) = sv5(i) + h(5)
149 sv6(i) = sv6(i) + h(6)
150 p(i) = p(i) + hp
151 ENDDO
152 ENDDO
153
154 DO i=1,nel
155 sv1(i) = sv1(i) - p(i)
156 sv2(i) = sv2(i) - p(i)
157 sv3(i) = sv3(i) - p(i)
158
159 soundsp(i) = sqrt(soundsp(i)**2 + (four_over_3*g + rbulk)/rho(i))
160 ENDDO
161 ELSE
162 DO i=1,nel
163
164 trace(i) = epspxx(i) + epspyy(i) + epspzz(i)
165 dav = third*trace(i)
166 p(i) = -kv0*trace(i)
167
168 epxx(i) = epspxx(i) - dav
169 epyy(i) = epspyy(i) - dav
170 epzz(i) = epspzz(i) - dav
171
172 sv1(i) = zero
173 sv2(i) = zero
174 sv3(i) = zero
175 sv4(i) = zero
176 sv5(i) = zero
177 sv6(i) = zero
178 ENDDO
179
180 DO j= 1,nprony
181 ii = (j-1)*(nvarvis-nvar_damp)/nprony
182
183 DO i=1,nel
184 h0(1) = uvarvis(i,ii + 1)
185 h0(2) = uvarvis(i,ii + 2)
186 h0(3) = uvarvis(i,ii + 3)
187 h0(4) = uvarvis(i,ii + 4)
188 h0(5) = uvarvis(i,ii + 5)
189 h0(6) = uvarvis(i,ii + 6)
190 hp0 = uvarvis(i,ii + 7)
191
192 h(1) = aa(j)*h0(1) + bb(j)*epxx(i)
193 h(2) = aa(j)*h0(2) + bb(j)*epyy(i)
194 h(3) = aa(j)*h0(3) + bb(j)*epzz(i)
195 h(4) = aa(j)*h0(4) + half*bb(j)*epspxy(i)
196 h(5) = aa(j)*h0(5) + half*bb(j)*epspyz(i)
197 h(6) = aa(j)*h0(6) + half*bb(j)*epspzx(i)
198
199 uvarvis(i,ii + 1) = h(1)
200 uvarvis(i,ii + 2) = h(2)
201 uvarvis(i,ii + 3) = h(3)
202 uvarvis(i,ii + 4) = h(4)
203 uvarvis(i,ii + 5) = h(5)
204 uvarvis(i,ii + 6) = h(6)
205
206 sv1(i) = sv1(i) + h(1)
207 sv2(i) = sv2(i) + h(2)
208 sv3(i) = sv3(i) + h(3)
209 sv4(i) = sv4(i) + h(4)
210 sv5(i) = sv5(i) + h(5)
211 sv6(i) = sv6(i) + h(6)
212 ENDDO
213 ENDDO
214
215 DO i=1,nel
216 sv1(i) = sv1(i) - p(i)
217 sv2(i) = sv2(i) - p(i)
218 sv3(i) = sv3(i) - p(i)
219
220 soundsp(i) = sqrt(soundsp(i)**2 + (four_over_3*g + rbulk)/rho(i))
221 ENDDO
222 ENDIF
223
224 RETURN