8 use hecmw,
only : kint, kreal
17 (etype, nn, ecoord, gausses, stiff, cdsys_id, coords, &
18 time, tincr, nn_p, lambda, u, temperature)
25 integer(kind=kint),
intent(in) :: etype
26 integer(kind=kint),
intent(in) :: nn
27 real(kind=kreal),
intent(in) :: ecoord(3, nn)
29 real(kind=kreal),
intent(out) :: stiff(:, :)
30 integer(kind=kint),
intent(in) :: cdsys_id
31 real(kind=kreal),
intent(inout) :: coords(3, 3)
32 real(kind=kreal),
intent(in) :: time
33 real(kind=kreal),
intent(in) :: tincr
34 integer(kind=kint),
intent(in) :: nn_p
35 real(kind=kreal),
intent(in) :: lambda(nn_p)
36 real(kind=kreal),
intent(in),
optional :: u(:, :)
37 real(kind=kreal),
intent(in),
optional :: temperature(nn)
39 integer(kind=kint) :: flag
40 integer(kind=kint),
parameter :: ndof = 3
41 real(kind=kreal) :: d(6, 6), b(6, ndof*nn), db(6, ndof*nn)
42 real(kind=kreal) :: gderiv(nn, 3), stress(6), mat(6, 6)
43 real(kind=kreal) :: det, wg, temp, spfunc(nn)
44 integer(kind=kint) :: i, j, lx, serr
45 real(kind=kreal) :: naturalcoord(3), coordsys(3, 3)
46 real(kind=kreal) :: gdispderiv(3, 3)
47 real(kind=kreal) :: b1(6, ndof*nn)
48 real(kind=kreal) :: smat(9, 9), elem(3, nn)
49 real(kind=kreal) :: bn(9, ndof*nn), sbn(9, ndof*nn)
50 integer(kind=kint) :: na, nb
51 integer(kind=kint) :: na_p, nb_p
52 integer(kind=kint) :: isize, jsize
53 integer(kind=kint) :: jsize1, jsize2, jsize3
54 real(kind=kreal) :: stiff_up(3*nn, nn_p)
55 real(kind=kreal) :: stiff_pp(nn_p, nn_p), stiff_pp_inv(nn_p, nn_p)
56 real(kind=kreal) :: stiff_up_stiff_pp_inv(3*nn, nn_p)
57 real(kind=kreal) :: stiff_up_stiff_pp_inv_stiff_up(3*nn, 3*nn)
58 real(kind=kreal) :: alpha_inv
60 real(kind=kreal) :: d2(6)
61 real(kind=kreal) :: bd2(3*nn)
62 real(kind=kreal) :: lambda_lx
63 real(kind=kreal) :: spfunc_p(nn_p)
66 stiff_up(:, :) = 0.0d0
67 stiff_pp(:, :) = 0.0d0
70 flag = gausses(1)%pMaterial%nlgeom_flag
71 if( .not.
present(u) ) flag = infinitesimal
72 elem(:, :) = ecoord(:, :)
74 if( flag == updatelag ) elem(:, :) = ecoord(:, :)+u(:, :)
75 if( flag == infinitesimal ) gdispderiv(:, :) = 0.0d0
78 coordsys(1, 1) = 1.0d0; coordsys(2, 2) = 1.0d0; coordsys(3, 3) = 1.0d0
85 if( cdsys_id > 0 )
then
87 if( serr == -1 ) stop
"Fail to setup local coordinate"
88 if( serr == -2 )
write(*, *)
"WARNING! Cannot setup local coordinate, it is modified automatically"
92 if( flag == totallag )
then
93 gdispderiv(1:3, 1:3) = matmul( u(1:3, 1:nn), gderiv(1:nn, 1:3) )
95 gdispderiv(1:3, 1:3) = 0.0d0
98 if( nn_p == 1 ) spfunc_p(1) = 1.0d0
103 lambda_lx = lambda_lx+spfunc_p(na_p)*lambda(na_p)
106 if(
present( temperature ) )
then
108 temp = dot_product( temperature, spfunc )
109 call matlmatrix_up( gausses(lx), d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys, temp )
111 call matlmatrix_up( gausses(lx), d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
115 if( flag == updatelag )
then
116 call geomat_c3( gausses(lx)%stress, mat )
117 d(:, :) = d(:, :)-mat
126 b(1, jsize1) = gderiv(nb, 1)
129 b(4, jsize1) = gderiv(nb, 2)
131 b(6, jsize1) = gderiv(nb, 3)
133 b(2, jsize2) = gderiv(nb, 2)
135 b(4, jsize2) = gderiv(nb, 1)
136 b(5, jsize2) = gderiv(nb, 3)
140 b(3, jsize3) = gderiv(nb, 3)
142 b(5, jsize3) = gderiv(nb, 2)
143 b(6, jsize3) = gderiv(nb, 1)
150 b1(1, jsize1) = gdispderiv(1, 1)*gderiv(nb, 1)
151 b1(2, jsize1) = gdispderiv(1, 2)*gderiv(nb, 2)
152 b1(3, jsize1) = gdispderiv(1, 3)*gderiv(nb, 3)
153 b1(4, jsize1) = gdispderiv(1, 2)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 2)
154 b1(5, jsize1) = gdispderiv(1, 2)*gderiv(nb, 3)+gdispderiv(1, 3)*gderiv(nb, 2)
155 b1(6, jsize1) = gdispderiv(1, 3)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 3)
156 b1(1, jsize2) = gdispderiv(2, 1)*gderiv(nb, 1)
157 b1(2, jsize2) = gdispderiv(2, 2)*gderiv(nb, 2)
158 b1(3, jsize2) = gdispderiv(2, 3)*gderiv(nb, 3)
159 b1(4, jsize2) = gdispderiv(2, 2)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 2)
160 b1(5, jsize2) = gdispderiv(2, 2)*gderiv(nb, 3)+gdispderiv(2, 3)*gderiv(nb, 2)
161 b1(6, jsize2) = gdispderiv(2, 3)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 3)
162 b1(1, jsize3) = gdispderiv(3, 1)*gderiv(nb, 1)
163 b1(2, jsize3) = gdispderiv(3, 2)*gderiv(nb, 2)
164 b1(3, jsize3) = gdispderiv(3, 3)*gderiv(nb, 3)
165 b1(4, jsize3) = gdispderiv(3, 2)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 2)
166 b1(5, jsize3) = gdispderiv(3, 2)*gderiv(nb, 3)+gdispderiv(3, 3)*gderiv(nb, 2)
167 b1(6, jsize3) = gdispderiv(3, 3)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 3)
171 b(:, jsize) = b(:, jsize)+b1(:, jsize)
174 db(1:6, 1:3*nn) = matmul( d(1:6, 1:6), b(1:6, 1:3*nn) )
177 forall( isize = 1:3*nn, jsize = 1:3*nn )
178 stiff(isize, jsize) = stiff(isize, jsize)+wg*dot_product( b(:, isize), db(:, jsize) )
182 if( flag == totallag .or. flag == updatelag )
then
183 stress(1:6) = gausses(lx)%stress
189 bn(1, jsize1) = gderiv(nb, 1)
190 bn(2, jsize1) = 0.0d0
191 bn(3, jsize1) = 0.0d0
192 bn(4, jsize1) = gderiv(nb, 2)
193 bn(5, jsize1) = 0.0d0
194 bn(6, jsize1) = 0.0d0
195 bn(7, jsize1) = gderiv(nb, 3)
196 bn(8, jsize1) = 0.0d0
197 bn(9, jsize1) = 0.0d0
198 bn(1, jsize2) = 0.0d0
199 bn(2, jsize2) = gderiv(nb, 1)
200 bn(3, jsize2) = 0.0d0
201 bn(4, jsize2) = 0.0d0
202 bn(5, jsize2) = gderiv(nb, 2)
203 bn(6, jsize2) = 0.0d0
204 bn(7, jsize2) = 0.0d0
205 bn(8, jsize2) = gderiv(nb, 3)
206 bn(9, jsize2) = 0.0d0
207 bn(1, jsize3) = 0.0d0
208 bn(2, jsize3) = 0.0d0
209 bn(3, jsize3) = gderiv(nb, 1)
210 bn(4, jsize3) = 0.0d0
211 bn(5, jsize3) = 0.0d0
212 bn(6, jsize3) = gderiv(nb, 2)
213 bn(7, jsize3) = 0.0d0
214 bn(8, jsize3) = 0.0d0
215 bn(9, jsize3) = gderiv(nb, 3)
220 smat(j , j ) = stress(1)
221 smat(j , j+3) = stress(4)
222 smat(j , j+6) = stress(6)
223 smat(j+3, j ) = stress(4)
224 smat(j+3, j+3) = stress(2)
225 smat(j+3, j+6) = stress(5)
226 smat(j+6, j ) = stress(6)
227 smat(j+6, j+3) = stress(5)
228 smat(j+6, j+6) = stress(3)
231 sbn(1:9, 1:3*nn) = matmul( smat(1:9, 1:9), bn(1:9, 1:3*nn) )
233 forall( isize = 1:3*nn, jsize = 1:3*nn )
234 stiff(isize, jsize) = stiff(isize, jsize)+wg*dot_product( bn(:, isize), sbn(:, jsize) )
239 bd2(isize) = dot_product( b(:, isize), d2(:) )
243 forall( isize = 1:3*nn, nb_p = 1:nn_p )
244 stiff_up(isize, nb_p) = stiff_up(isize, nb_p)+wg*bd2(isize)*spfunc_p(nb_p)
248 forall( na_p = 1:nn_p, nb_p = 1:nn_p )
249 stiff_pp(na_p, nb_p) = stiff_pp(na_p, nb_p)-wg*alpha_inv*spfunc_p(na_p)*spfunc_p(nb_p)
256 stiff_pp_inv(1, 1) = 1.0d0/stiff_pp(1, 1)
258 write(6, *)
'Error: nn_p should be equal to 1.'
262 stiff_up_stiff_pp_inv(1:3*nn, 1:nn_p) = matmul( stiff_up(1:3*nn, 1:nn_p), stiff_pp_inv(1:nn_p, 1:nn_p) )
265 forall( isize = 1:3*nn, jsize = 1:3*nn )
266 stiff_up_stiff_pp_inv_stiff_up(isize, jsize) = dot_product( stiff_up_stiff_pp_inv(isize, :), stiff_up(jsize, :) )
270 forall( isize = 1:3*nn, jsize = 1:3*nn )
271 stiff(isize, jsize) = stiff(isize, jsize)-stiff_up_stiff_pp_inv_stiff_up(isize, jsize)
279 (etype, nn, ecoord, u, du, ddu, cdsys_id, coords, qf, &
280 gausses, iter, time, tincr, &
281 nn_p, lambda, ddlambda, tt, t0)
291 integer(kind=kint),
intent(in) :: etype
292 integer(kind=kint),
intent(in) :: nn
293 real(kind=kreal),
intent(in) :: ecoord(3, nn)
294 real(kind=kreal),
intent(in) :: u(3, nn)
295 real(kind=kreal),
intent(in) :: du(3, nn)
296 real(kind=kreal),
intent(in) :: ddu(3, nn)
297 integer(kind=kint),
intent(in) :: cdsys_id
298 real(kind=kreal),
intent(inout) :: coords(3, 3)
299 real(kind=kreal),
intent(out) :: qf(nn*3)
301 integer,
intent(in) :: iter
302 real(kind=kreal),
intent(in) :: time
303 real(kind=kreal),
intent(in) :: tincr
304 integer(kind=kint),
intent(in) :: nn_p
305 real(kind=kreal),
intent(in) :: lambda(nn_p)
306 real(kind=kreal),
intent(inout) :: ddlambda(nn_p)
307 real(kind=kreal),
intent(in),
optional :: tt(nn)
308 real(kind=kreal),
intent(in),
optional :: t0(nn)
310 integer(kind=kint) :: flag
311 integer(kind=kint),
parameter :: ndof = 3
312 real(kind=kreal) :: d(6, 6), b(6, ndof*nn), b1(6, ndof*nn)
313 real(kind=kreal) :: gderiv(nn, 3), gdispderiv(3, 3), det, wg
314 integer(kind=kint) :: i, j, lx, mtype, serr
315 real(kind=kreal) :: naturalcoord(3), rot(3, 3), spfunc(nn), coordsys(3, 3)
316 real(kind=kreal) :: totaldisp(3, nn), elem(3, nn), elem1(3, nn)
317 real(kind=kreal) :: dstrain(6), dstress(6), dumstress(3, 3), dum(3, 3)
318 real(kind=kreal) :: trd, p_bak
319 real(kind=kreal) :: ttc, tt0, outa(1), ina(1), epsth(6)
321 integer(kind=kint) :: na, nb
322 integer(kind=kint) :: na_p, nb_p
323 integer(kind=kint) :: isize, jsize
324 integer(kind=kint) :: jsize1, jsize2, jsize3
325 real(kind=kreal) :: totallambda(nn_p)
326 real(kind=kreal) :: stiff_up(3*nn, nn_p)
327 real(kind=kreal) :: stiff_pp(nn_p, nn_p), stiff_pp_inv(nn_p, nn_p)
328 real(kind=kreal) :: stiff_up_stiff_pp_inv(3*nn, nn_p)
329 real(kind=kreal) :: stiff_up_stiff_pp_inv_stiff_up(3*nn, 3*nn)
330 real(kind=kreal) :: stiff_up_stiff_pp_inv_qf_p(3*nn)
331 real(kind=kreal) :: alpha_inv
332 real(kind=kreal) :: g
333 real(kind=kreal) :: qf_p(nn_p)
334 real(kind=kreal) :: stiff_up_ddu(nn_p)
335 real(kind=kreal) :: d2(6)
336 real(kind=kreal) :: bd2(3*nn)
337 real(kind=kreal) :: lambda_lx
338 real(kind=kreal) :: spfunc_p(nn_p)
340 stiff_up(:, :) = 0.0d0
341 stiff_pp(:, :) = 0.0d0
345 flag = gausses(1)%pMaterial%nlgeom_flag
346 elem(:, :) = ecoord(:, :)
347 totaldisp(:, :) = u(:, :)+( du(:, :)-ddu(:, :) )
349 if( flag ==
updatelag ) elem(:, :) = ecoord(:, :)+u(:, :)+( du(:, :)-ddu(:, :) )
353 coordsys(1, 1) = 1.0d0; coordsys(2, 2) = 1.0d0; coordsys(3, 3) = 1.0d0
364 if( cdsys_id > 0 )
then
366 if( serr == -1 ) stop
"Fail to setup local coordinate"
367 if( serr == -2 )
write(*, *)
"WARNING! Cannot setup local coordinate, it is modified automatically"
371 if( flag ==
totallag ) gdispderiv(1:3, 1:3) = matmul( totaldisp(1:3, 1:nn), gderiv(1:nn, 1:3) )
373 if( nn_p == 1 ) spfunc_p(1) = 1.0d0
378 lambda_lx = lambda_lx+spfunc_p(na_p)*lambda(na_p)
381 mtype = gausses(lx)%pMaterial%mtype
387 ( gausses(lx)%pMaterial%mtype ==
norton ) ) gausses(lx)%pMaterial%mtype =
elastic
391 if(
present( tt ) .and.
present( t0 ) )
then
393 ttc = dot_product( tt, spfunc )
394 tt0 = dot_product( t0, spfunc )
395 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys, ttc )
396 if( ( iter <= 1 ) .or. ( flag ==
totallag ) )
then
398 call fetch_tabledata(
mc_themoexp, gausses(lx)%pMaterial%dict, outa, ierr, ina )
399 if( ierr ) outa(1) = gausses(lx)%pMaterial%variables(
m_exapnsion)
400 epsth(1:3) = outa(1)*( ttc-tt0 )
403 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
410 b(1, jsize1) = gderiv(nb, 1)
413 b(4, jsize1) = gderiv(nb, 2)
415 b(6, jsize1) = gderiv(nb, 3)
417 b(2, jsize2) = gderiv(nb, 2)
419 b(4, jsize2) = gderiv(nb, 1)
420 b(5, jsize2) = gderiv(nb, 3)
424 b(3, jsize3) = gderiv(nb, 3)
426 b(5, jsize3) = gderiv(nb, 2)
427 b(6, jsize3) = gderiv(nb, 1)
436 b1(1, jsize1) = gdispderiv(1, 1)*gderiv(nb, 1)
437 b1(2, jsize1) = gdispderiv(1, 2)*gderiv(nb, 2)
438 b1(3, jsize1) = gdispderiv(1, 3)*gderiv(nb, 3)
439 b1(4, jsize1) = gdispderiv(1, 2)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 2)
440 b1(5, jsize1) = gdispderiv(1, 2)*gderiv(nb, 3)+gdispderiv(1, 3)*gderiv(nb, 2)
441 b1(6, jsize1) = gdispderiv(1, 3)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 3)
442 b1(1, jsize2) = gdispderiv(2, 1)*gderiv(nb, 1)
443 b1(2, jsize2) = gdispderiv(2, 2)*gderiv(nb, 2)
444 b1(3, jsize2) = gdispderiv(2, 3)*gderiv(nb, 3)
445 b1(4, jsize2) = gdispderiv(2, 2)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 2)
446 b1(5, jsize2) = gdispderiv(2, 2)*gderiv(nb, 3)+gdispderiv(2, 3)*gderiv(nb, 2)
447 b1(6, jsize2) = gdispderiv(2, 3)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 3)
448 b1(1, jsize3) = gdispderiv(3, 1)*gderiv(nb, 1)
449 b1(2, jsize3) = gdispderiv(3, 2)*gderiv(nb, 2)
450 b1(3, jsize3) = gdispderiv(3, 3)*gderiv(nb, 3)
451 b1(4, jsize3) = gdispderiv(3, 2)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 2)
452 b1(5, jsize3) = gdispderiv(3, 2)*gderiv(nb, 3)+gdispderiv(3, 3)*gderiv(nb, 2)
453 b1(6, jsize3) = gdispderiv(3, 3)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 3)
456 b(:, jsize) = b(:, jsize)+b1(:, jsize)
461 bd2(isize) = dot_product( b(:, isize), d2 )
465 forall( isize = 1:3*nn, nb_p = 1:nn_p )
466 stiff_up(isize, nb_p) = stiff_up(isize, nb_p)+wg*bd2(isize)*spfunc_p(nb_p)
470 forall( na_p = 1:nn_p, nb_p = 1:nn_p )
471 stiff_pp(na_p, nb_p) = stiff_pp(na_p, nb_p)-wg*alpha_inv*spfunc_p(na_p)*spfunc_p(nb_p)
474 qf_p(1:nn_p) = qf_p(1:nn_p)+wg*spfunc_p(1:nn_p)*( g-alpha_inv*lambda_lx )
480 stiff_pp_inv(1, 1) = 1.0d0/stiff_pp(1, 1)
482 write(6, *)
'Error: nn_p should be equal to 1.'
487 stiff_up_ddu(na_p) = 0.0d0
491 stiff_up_ddu(na_p) = stiff_up_ddu(na_p)+stiff_up(jsize, na_p)*ddu(i, nb)
497 ddlambda(na_p) = dot_product( stiff_pp_inv(na_p, :), -qf_p-stiff_up_ddu )
500 totaldisp(:, :) = u(:, :)+du(:, :)
501 totallambda(:) = lambda(:)+ddlambda(:)
503 stiff_up(:, :) = 0.0d0
504 stiff_pp(:, :) = 0.0d0
510 elem(:, :) = ecoord(:, :)
512 elem(:, :) = ecoord(:, :)+u(:, :)+0.5d0*du(:, :)
513 elem1(:, :) = ecoord(:, :)+u(:, :)+du(:, :)
525 if( cdsys_id > 0 )
then
527 if( serr == -1 ) stop
"Fail to setup local coordinate"
528 if( serr == -2 )
write(*, *)
"WARNING! Cannot setup local coordinate, it is modified automatically"
533 gdispderiv(1:3, 1:3) = matmul( du(1:3, 1:nn), gderiv(1:nn, 1:3) )
535 gdispderiv(1:3, 1:3) = matmul( totaldisp(1:3, 1:nn), gderiv(1:nn, 1:3) )
538 if( nn_p == 1 ) spfunc_p(1) = 1.0d0
543 lambda_lx = lambda_lx+spfunc_p(na_p)*totallambda(na_p)
546 mtype = gausses(lx)%pMaterial%mtype
551 dstrain(1) = gdispderiv(1, 1)
552 dstrain(2) = gdispderiv(2, 2)
553 dstrain(3) = gdispderiv(3, 3)
554 dstrain(4) = gdispderiv(1, 2)+gdispderiv(2, 1)
555 dstrain(5) = gdispderiv(2, 3)+gdispderiv(3, 2)
556 dstrain(6) = gdispderiv(3, 1)+gdispderiv(1, 3)
557 dstrain(:) = dstrain(:)-epsth(:)
561 dstrain(1) = dstrain(1)+0.5d0*dot_product( gdispderiv(:, 1), gdispderiv(:, 1) )
562 dstrain(2) = dstrain(2)+0.5d0*dot_product( gdispderiv(:, 2), gdispderiv(:, 2) )
563 dstrain(3) = dstrain(3)+0.5d0*dot_product( gdispderiv(:, 3), gdispderiv(:, 3) )
564 dstrain(4) = dstrain(4)+dot_product( gdispderiv(:, 1), gdispderiv(:, 2) )
565 dstrain(5) = dstrain(5)+dot_product( gdispderiv(:, 2), gdispderiv(:, 3) )
566 dstrain(6) = dstrain(6)+dot_product( gdispderiv(:, 1), gdispderiv(:, 3) )
572 rot(1, 2) = 0.5d0*( gdispderiv(1, 2)-gdispderiv(2, 1) ); rot(2, 1) = -rot(1, 2)
573 rot(2, 3) = 0.5d0*( gdispderiv(2, 3)-gdispderiv(3, 2) ); rot(3, 2) = -rot(2, 3)
574 rot(1, 3) = 0.5d0*( gdispderiv(1, 3)-gdispderiv(3, 1) ); rot(3, 1) = -rot(1, 3)
575 gausses(lx)%strain(1:6) = gausses(lx)%strain_bak(1:6)+dstrain(1:6)+epsth(:)
577 gausses(lx)%strain(1:6) = dstrain(1:6)+epsth(:)
582 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
585 p_bak = ( gausses(lx)%stress_bak(1)+gausses(lx)%stress_bak(2)+gausses(lx)%stress_bak(3) )/3.0d0
586 dumstress(1, 1) = gausses(lx)%stress_bak(1)-p_bak
587 dumstress(2, 2) = gausses(lx)%stress_bak(2)-p_bak
588 dumstress(3, 3) = gausses(lx)%stress_bak(3)-p_bak
589 dumstress(1, 2) = gausses(lx)%stress_bak(4); dumstress(2, 1) = dumstress(1, 2)
590 dumstress(2, 3) = gausses(lx)%stress_bak(5); dumstress(3, 2) = dumstress(2, 3)
591 dumstress(3, 1) = gausses(lx)%stress_bak(6); dumstress(1, 3) = dumstress(3, 1)
592 trd = dstrain(1)+dstrain(2)+dstrain(3)
593 dum(:, :) = dumstress+matmul( rot, dumstress )-matmul( dumstress, rot )-dumstress*trd
594 dstress(1:6) = matmul( d(1:6, 1:6), dstrain(1:6) )
595 gausses(lx)%stress(1) = dum(1, 1)+dstress(1)+lambda_lx
596 gausses(lx)%stress(2) = dum(2, 2)+dstress(2)+lambda_lx
597 gausses(lx)%stress(3) = dum(3, 3)+dstress(3)+lambda_lx
598 gausses(lx)%stress(4) = dum(1, 2)+dstress(4)
599 gausses(lx)%stress(5) = dum(2, 3)+dstress(5)
600 gausses(lx)%stress(6) = dum(3, 1)+dstress(6)
602 call stressupdate_up( gausses(lx),
d3, dstrain, gausses(lx)%stress, lambda_lx, g, coordsys )
605 gausses(lx)%stress_out(1:6) = gausses(lx)%stress(1:6)
606 gausses(lx)%strain_out(1:6) = gausses(lx)%strain(1:6)
610 if(
present( tt ) .and.
present( t0 ) )
then
612 ttc = dot_product( tt, spfunc )
613 tt0 = dot_product( t0, spfunc )
614 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys, ttc )
615 if( ( iter <= 1 ) .or. ( flag ==
totallag ) )
then
617 call fetch_tabledata(
mc_themoexp, gausses(lx)%pMaterial%dict, outa, ierr, ina )
618 if( ierr ) outa(1) = gausses(lx)%pMaterial%variables(
m_exapnsion)
619 epsth(1:3) = outa(1)*( ttc-tt0 )
622 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
628 call getglobalderiv( etype, nn, naturalcoord, elem1, det, gderiv )
636 b(1, jsize1) = gderiv(nb, 1)
639 b(4, jsize1) = gderiv(nb, 2)
641 b(6, jsize1) = gderiv(nb, 3)
643 b(2, jsize2) = gderiv(nb, 2)
645 b(4, jsize2) = gderiv(nb, 1)
646 b(5, jsize2) = gderiv(nb, 3)
650 b(3, jsize3) = gderiv(nb, 3)
652 b(5, jsize3) = gderiv(nb, 2)
653 b(6, jsize3) = gderiv(nb, 1)
662 b1(1, jsize1) = gdispderiv(1, 1)*gderiv(nb, 1)
663 b1(2, jsize1) = gdispderiv(1, 2)*gderiv(nb, 2)
664 b1(3, jsize1) = gdispderiv(1, 3)*gderiv(nb, 3)
665 b1(4, jsize1) = gdispderiv(1, 2)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 2)
666 b1(5, jsize1) = gdispderiv(1, 2)*gderiv(nb, 3)+gdispderiv(1, 3)*gderiv(nb, 2)
667 b1(6, jsize1) = gdispderiv(1, 3)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 3)
668 b1(1, jsize2) = gdispderiv(2, 1)*gderiv(nb, 1)
669 b1(2, jsize2) = gdispderiv(2, 2)*gderiv(nb, 2)
670 b1(3, jsize2) = gdispderiv(2, 3)*gderiv(nb, 3)
671 b1(4, jsize2) = gdispderiv(2, 2)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 2)
672 b1(5, jsize2) = gdispderiv(2, 2)*gderiv(nb, 3)+gdispderiv(2, 3)*gderiv(nb, 2)
673 b1(6, jsize2) = gdispderiv(2, 3)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 3)
674 b1(1, jsize3) = gdispderiv(3, 1)*gderiv(nb, 1)
675 b1(2, jsize3) = gdispderiv(3, 2)*gderiv(nb, 2)
676 b1(3, jsize3) = gdispderiv(3, 3)*gderiv(nb, 3)
677 b1(4, jsize3) = gdispderiv(3, 2)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 2)
678 b1(5, jsize3) = gdispderiv(3, 2)*gderiv(nb, 3)+gdispderiv(3, 3)*gderiv(nb, 2)
679 b1(6, jsize3) = gdispderiv(3, 3)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 3)
682 b(:, jsize) = b(:, jsize)+b1(:, jsize)
687 bd2(isize) = dot_product( b(:, isize), d2 )
691 forall( isize = 1:3*nn, nb_p = 1:nn_p )
692 stiff_up(isize, nb_p) = stiff_up(isize, nb_p)+wg*bd2(isize)*spfunc_p(nb_p)
696 forall( na_p = 1:nn_p, nb_p = 1:nn_p )
697 stiff_pp(na_p, nb_p) = stiff_pp(na_p, nb_p)-wg*alpha_inv*spfunc_p(na_p)*spfunc_p(nb_p)
701 qf(1:3*nn) = qf(1:3*nn)+wg*matmul( gausses(lx)%stress(1:6), b(1:6, 1:3*nn) )
703 qf_p(1:nn_p) = qf_p(1:nn_p)+wg*spfunc_p(1:nn_p)*( g-alpha_inv*lambda_lx )
709 stiff_pp_inv(1, 1) = 1.0d0/stiff_pp(1, 1)
711 write(6, *)
'Error: nn_p should be equal to 1.'
715 stiff_up_stiff_pp_inv(1:3*nn, 1:nn_p) = matmul( stiff_up(1:3*nn, 1:nn_p), stiff_pp_inv(1:nn_p, 1:nn_p) )
718 stiff_up_stiff_pp_inv_qf_p(isize) = dot_product( stiff_up_stiff_pp_inv(isize, :), qf_p )
723 qf(isize) = qf(isize)-stiff_up_stiff_pp_inv_qf_p(isize)
This module encapsulate the basic functions of all elements provide by this software.
subroutine getshapefunc(fetype, localcoord, func)
Calculate the shape function in natural coordinate system.
subroutine getquadpoint(fetype, np, pos)
Fetch the coordinate of gauss point.
subroutine getglobalderiv(fetype, nn, localcoord, elecoord, det, gderiv)
Calculate shape derivative in global coordinate system.
real(kind=kreal) function getweight(fetype, np)
Fetch the weight value in given gauss point.
integer function numofquadpoints(fetype)
Obtains the number of quadrature points of the element.
This modules defines common structures for fem analysis.
type(tlocalcoordsys), dimension(:), pointer, save g_localcoordsys
subroutine set_localcoordsys(coords, coordsys, outsys, ierr)
setup of coordinate system
This module provide functions for elastoplastic calculation.
This module manages calculation relates with materials.
subroutine stressupdate_up(gauss, sectType, strain, stress, lambda, g, cdsys)
Update stress for the u-p mixed formulation. Deviatoric stress from the material law (K=0) plus the p...
subroutine matlmatrix_up(gauss, sectType, D, lambda, d2, alpha_inv, g, time, dtime, cdsys, temperature)
Constitutive matrix for the u-p mixed formulation. Returns the deviatoric tangent D (K=0),...
This module provides functions of u-p mixed (UP) solid elements.
subroutine update_c3_up(etype, nn, ecoord, u, du, ddu, cdsys_ID, coords, qf, gausses, iter, time, tincr, nn_p, lambda, ddlambda, tt, t0)
Update strain and stress inside u-p mixed (UP) solid element.
subroutine stf_c3_up(etype, nn, ecoord, gausses, stiff, cdsys_ID, coords, time, tincr, nn_p, lambda, u, temperature)
This subroutine calculate stiff matrix of u-p mixed solid elements.
This module provides common functions of Solid elements.
subroutine geomat_c3(stress, mat)
This module provides aux functions.
This module provides functions for hyperelastic calculation.
This module summarizes all information of material properties.
integer(kind=kint), parameter m_exapnsion
character(len=dict_key_length) mc_themoexp
integer(kind=kint), parameter d3
integer(kind=kint), parameter elastic
integer(kind=kint), parameter totallag
integer(kind=kint), parameter norton
integer(kind=kint), parameter infinitesimal
integer(kind=kint), parameter updatelag
logical function iselastoplastic(mtype)
If it is an elastoplastic material?
This modules defines a structure to record history dependent parameter in static analysis.
All data should be recorded in every quadrature points.