41
42
43
44 USE matparam_def_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "mvsiz_p.inc"
53#include "com04_c.inc"
54#include "com08_c.inc"
55
56
57
58 INTEGER, INTENT(IN) :: ISMSTR
59 INTEGER NC1(*),NC2(*),NC3(*),NC4(*),MAT(*),NEL
60 INTEGER,INTENT(IN) :: S_SFEM_NODVAR
61 my_real :: offg(*),vol0(*),amu0(*),
62 . dxx(*),dyy(*),dzz(*),voln(*),
63 . fxx(*), fxy(*), fxz(*),
64 . fyx(*), fyy(*), fyz(*),
65 . fzx(*), fzy(*), fzz(*),
66 . rho(*),rho0
67 my_real,
INTENT(INOUT) :: sfem_nodvar(s_sfem_nodvar)
68 TYPE(MATPARAM_STRUCT_), DIMENSION(NUMMAT) :: MATPARAM
69
70
71
72#include "scr18_c.inc"
73#include "scr05_c.inc"
74
75
76
77 INTEGER ,MX
78 my_real amu(mvsiz), sum,dtr,dtrep_r,divde(mvsiz),jac_m(mvsiz),jac(mvsiz),fac,base,jfac,dvdp
79 DOUBLE PRECISION VOL0DP(*),VOLDP(*),SUMDP
80
81
82
83 mx = mat(1)
84 IF(ismstr == 1 .OR. ismstr == 11)THEN
85 IF (tt==zero) THEN
86 DO i=1,nel
87 IF(offg(i) == zero) cycle
88 amu0(i) = rho(i)/rho0-one
89 ENDDO
90 ELSE
91 DO i=1,nel
92 IF(offg(i) == zero) cycle
93 sum=sfem_nodvar(nc1(i))+sfem_nodvar(nc2(i))+sfem_nodvar(nc3(i))+sfem_nodvar(nc4(i))
94 amu(i) = four/sum -one
95 divde(i) = amu0(i)-amu(i)
96 dtr=divde(i)/dt1
97 dtrep_r = third*(dtr-dxx(i)-dyy(i)-dzz(i))
98 dxx(i) = dxx(i) + dtrep_r
99 dyy(i) = dyy(i) + dtrep_r
100 dzz(i) = dzz(i) + dtrep_r
101 amu0(i)= rho(i)/rho0-one-divde(i)
102 ENDDO
103 END IF
104 ELSE
105
106 IF(iresp == 1)THEN
107 DO i=1,nel
108 IF(offg(i) == zero .OR. abs(offg(i)) > one) cycle
109 sumdp=sfem_nodvar(nc1(i))+sfem_nodvar(nc2(i))+sfem_nodvar(nc3(i))+sfem_nodvar(nc4(i))
110 voldp(i) = fourth*sumdp*vol0dp(i)
111 voln(i) = voldp(i)
112 ENDDO
113 ELSE
114 DO i=1,nel
115 IF(offg(i) == zero .OR. abs(offg(i)) > one) cycle
116 sum=sfem_nodvar(nc1(i))+sfem_nodvar(nc2(i))+sfem_nodvar(nc3(i))+sfem_nodvar(nc4(i))
117 voln(i)=fourth*sum*vol0(i)
118 ENDDO
119 END IF
120 IF (matparam(mx)%STRAIN_FORMULATION == 1) THEN
121
122 IF(iresp == 1)THEN
123 amu(1:nel) = vol0dp(1:nel)/voldp(1:nel) - one
124 ELSE
125 amu(1:nel) = vol0(1:nel)/voln(1:nel) - one
126 END IF
127 IF (tt == zero) THEN
128 amu0(1:nel) = amu(1:nel)
129 ELSE
130 DO i = 1,nel
131 IF(offg(i)==zero.OR.abs(offg(i))>one) cycle
132 dtr = (dxx(i) + dyy(i) + dzz(i))*dt1
133 dtrep_r = third*((amu(i)-amu0(i))+dtr)/dt1
134 dxx(i) = dxx(i) - dtrep_r
135 dyy(i) = dyy(i) - dtrep_r
136 dzz(i) = dzz(i) - dtrep_r
137 amu0(i) = amu(i)
138 ENDDO
139 END IF
140 ENDIF
141 IF(ismstr >= 10)THEN
142 DO i=1,nel
143 IF(offg(i)==zero) cycle
144 jac_m(i)=voln(i)/vol0(i)
145 ENDDO
146 ENDIF
147 IF((ismstr == 2.OR.ismstr == 12).AND.idtmin(1) == 3) THEN
148 IF (tt==zero) THEN
149 DO i=1,nel
150 IF(offg(i)==zero) cycle
151 amu0(i) = rho(i)/rho0-one
152 ENDDO
153 ELSE
154 DO i=1,nel
155 IF(offg(i) == zero .OR. abs(offg(i)) <= one) cycle
156 sum=sfem_nodvar(nc1(i))+sfem_nodvar(nc2(i))+sfem_nodvar(nc3(i))+sfem_nodvar(nc4(i))
157 amu(i) = four/sum -one
158 divde(i) = amu0(i)-amu(i)
159 dtr=divde(i)/dt1
160 dtrep_r = third*(dtr-dxx(i)-dyy(i)-dzz(i))
161 dxx(i) = dxx(i) + dtrep_r
162 dyy(i) = dyy(i) + dtrep_r
163 dzz(i) = dzz(i) + dtrep_r
164 dvdp = divde(i)*(vol0(i)/voln(i))
165 amu0(i)= rho(i)/rho0-one-dvdp
166 ENDDO
167
168 IF(iresp == 1 .AND. ismstr == 12)THEN
169 DO i=1,nel
170 IF(offg(i) == zero .OR. abs(offg(i)) <= one) cycle
171 dvdp = divde(i)*(vol0(i)/voln(i))
172 amu0(i) = vol0dp(i)/voldp(i)-one-dvdp
173 ENDDO
174 END IF
175 END IF
176 ENDIF
177 ENDIF
178
179 IF (ismstr == 11) THEN
180
181 DO i=1,nel
182 dtrep_r = -third*(amu0(i)+fxx(i)+fyy(i)+fzz(i))
183 fxx(i) = fxx(i) + dtrep_r
184 fyy(i) = fyy(i) + dtrep_r
185 fzz(i) = fzz(i) + dtrep_r
186 ENDDO
187 ELSEIF(ismstr >= 10) THEN
188 DO i=1,nel
189 IF(abs(offg(i))<=one) cycle
190 dtrep_r = -third*(amu0(i)+fxx(i)+fyy(i)+fzz(i))
191 fxx(i) = fxx(i) + dtrep_r
192 fyy(i) = fyy(i) + dtrep_r
193 fzz(i) = fzz(i) + dtrep_r
194 ENDDO
196 1 jac, fxx, fxy, fxz,
197 2 fyx, fyy, fyz, fzx,
198 3 fzy, fzz, nel)
199
200 fac=third
201 DO i=1,nel
202 IF(abs(offg(i)) > one) cycle
203 base = jac_m(i)/
max(em20,jac(i))
204 jfac =exp(fac*log(
max(em20,base)))
205 fxx(i) = jfac*fxx(i)+jfac-one
206 fyy(i) = jfac*fyy(i)+jfac-one
207 fzz(i) = jfac*fzz(i)+jfac-one
208 fxy(i) = jfac*fxy(i)
209 fyx(i) = jfac*fyx(i)
210 fzx(i) = jfac*fzx(i)
211 fxz(i) = jfac*fxz(i)
212 fyz(i) = jfac*fyz(i)
213 fzy(i) = jfac*fzy(i)
214 ENDDO
215 END IF
216 RETURN
subroutine jacob_j33(det, aj1, aj2, aj3, aj4, aj5, aj6, aj7, aj8, aj9, nel)