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) :: 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) :: 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"
90 write(*, *)
"WARNING! Cannot setup local coordinate, it is modified automatically"
96 if( flag == totallag )
then
97 gdispderiv(1:3, 1:3) = matmul( u(1:3, 1:nn), gderiv(1:nn, 1:3) )
99 gdispderiv(1:3, 1:3) = 0.0d0
102 if( nn_p == 1 ) spfunc_p(1) = 1.0d0
107 lambda_lx = lambda_lx+spfunc_p(na_p)*lambda(na_p)
110 if(
present( temperature ) )
then
112 temp = dot_product( temperature, spfunc )
113 call matlmatrix_up( gausses(lx), d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys, temp )
115 call matlmatrix_up( gausses(lx), d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
119 if( flag == updatelag )
then
120 call geomat_c3( gausses(lx)%stress, mat )
121 d(:, :) = d(:, :)-mat
130 b(1, jsize1) = gderiv(nb, 1)
133 b(4, jsize1) = gderiv(nb, 2)
135 b(6, jsize1) = gderiv(nb, 3)
137 b(2, jsize2) = gderiv(nb, 2)
139 b(4, jsize2) = gderiv(nb, 1)
140 b(5, jsize2) = gderiv(nb, 3)
144 b(3, jsize3) = gderiv(nb, 3)
146 b(5, jsize3) = gderiv(nb, 2)
147 b(6, jsize3) = gderiv(nb, 1)
154 b1(1, jsize1) = gdispderiv(1, 1)*gderiv(nb, 1)
155 b1(2, jsize1) = gdispderiv(1, 2)*gderiv(nb, 2)
156 b1(3, jsize1) = gdispderiv(1, 3)*gderiv(nb, 3)
157 b1(4, jsize1) = gdispderiv(1, 2)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 2)
158 b1(5, jsize1) = gdispderiv(1, 2)*gderiv(nb, 3)+gdispderiv(1, 3)*gderiv(nb, 2)
159 b1(6, jsize1) = gdispderiv(1, 3)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 3)
160 b1(1, jsize2) = gdispderiv(2, 1)*gderiv(nb, 1)
161 b1(2, jsize2) = gdispderiv(2, 2)*gderiv(nb, 2)
162 b1(3, jsize2) = gdispderiv(2, 3)*gderiv(nb, 3)
163 b1(4, jsize2) = gdispderiv(2, 2)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 2)
164 b1(5, jsize2) = gdispderiv(2, 2)*gderiv(nb, 3)+gdispderiv(2, 3)*gderiv(nb, 2)
165 b1(6, jsize2) = gdispderiv(2, 3)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 3)
166 b1(1, jsize3) = gdispderiv(3, 1)*gderiv(nb, 1)
167 b1(2, jsize3) = gdispderiv(3, 2)*gderiv(nb, 2)
168 b1(3, jsize3) = gdispderiv(3, 3)*gderiv(nb, 3)
169 b1(4, jsize3) = gdispderiv(3, 2)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 2)
170 b1(5, jsize3) = gdispderiv(3, 2)*gderiv(nb, 3)+gdispderiv(3, 3)*gderiv(nb, 2)
171 b1(6, jsize3) = gdispderiv(3, 3)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 3)
175 b(:, jsize) = b(:, jsize)+b1(:, jsize)
178 db(1:6, 1:3*nn) = matmul( d(1:6, 1:6), b(1:6, 1:3*nn) )
181 forall( isize = 1:3*nn, jsize = 1:3*nn )
182 stiff(isize, jsize) = stiff(isize, jsize)+wg*dot_product( b(:, isize), db(:, jsize) )
186 if( flag == totallag .or. flag == updatelag )
then
187 stress(1:6) = gausses(lx)%stress
193 bn(1, jsize1) = gderiv(nb, 1)
194 bn(2, jsize1) = 0.0d0
195 bn(3, jsize1) = 0.0d0
196 bn(4, jsize1) = gderiv(nb, 2)
197 bn(5, jsize1) = 0.0d0
198 bn(6, jsize1) = 0.0d0
199 bn(7, jsize1) = gderiv(nb, 3)
200 bn(8, jsize1) = 0.0d0
201 bn(9, jsize1) = 0.0d0
202 bn(1, jsize2) = 0.0d0
203 bn(2, jsize2) = gderiv(nb, 1)
204 bn(3, jsize2) = 0.0d0
205 bn(4, jsize2) = 0.0d0
206 bn(5, jsize2) = gderiv(nb, 2)
207 bn(6, jsize2) = 0.0d0
208 bn(7, jsize2) = 0.0d0
209 bn(8, jsize2) = gderiv(nb, 3)
210 bn(9, jsize2) = 0.0d0
211 bn(1, jsize3) = 0.0d0
212 bn(2, jsize3) = 0.0d0
213 bn(3, jsize3) = gderiv(nb, 1)
214 bn(4, jsize3) = 0.0d0
215 bn(5, jsize3) = 0.0d0
216 bn(6, jsize3) = gderiv(nb, 2)
217 bn(7, jsize3) = 0.0d0
218 bn(8, jsize3) = 0.0d0
219 bn(9, jsize3) = gderiv(nb, 3)
224 smat(j , j ) = stress(1)
225 smat(j , j+3) = stress(4)
226 smat(j , j+6) = stress(6)
227 smat(j+3, j ) = stress(4)
228 smat(j+3, j+3) = stress(2)
229 smat(j+3, j+6) = stress(5)
230 smat(j+6, j ) = stress(6)
231 smat(j+6, j+3) = stress(5)
232 smat(j+6, j+6) = stress(3)
235 sbn(1:9, 1:3*nn) = matmul( smat(1:9, 1:9), bn(1:9, 1:3*nn) )
237 forall( isize = 1:3*nn, jsize = 1:3*nn )
238 stiff(isize, jsize) = stiff(isize, jsize)+wg*dot_product( bn(:, isize), sbn(:, jsize) )
243 bd2(isize) = dot_product( b(:, isize), d2(:) )
247 forall( isize = 1:3*nn, nb_p = 1:nn_p )
248 stiff_up(isize, nb_p) = stiff_up(isize, nb_p)+wg*bd2(isize)*spfunc_p(nb_p)
252 forall( na_p = 1:nn_p, nb_p = 1:nn_p )
253 stiff_pp(na_p, nb_p) = stiff_pp(na_p, nb_p)-wg*alpha_inv*spfunc_p(na_p)*spfunc_p(nb_p)
260 stiff_pp_inv(1, 1) = 1.0d0/stiff_pp(1, 1)
263 write(6, *)
'Error: nn_p should be equal to 1.'
268 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) )
271 forall( isize = 1:3*nn, jsize = 1:3*nn )
272 stiff_up_stiff_pp_inv_stiff_up(isize, jsize) = dot_product( stiff_up_stiff_pp_inv(isize, :), stiff_up(jsize, :) )
276 forall( isize = 1:3*nn, jsize = 1:3*nn )
277 stiff(isize, jsize) = stiff(isize, jsize)-stiff_up_stiff_pp_inv_stiff_up(isize, jsize)
285 (etype, nn, ecoord, u, du, ddu, cdsys_id, coords, qf, &
286 gausses, iter, time, tincr, &
287 nn_p, lambda, ddlambda, tt, t0)
297 integer(kind=kint),
intent(in) :: etype
298 integer(kind=kint),
intent(in) :: nn
299 real(kind=kreal),
intent(in) :: ecoord(3, nn)
300 real(kind=kreal),
intent(in) :: u(3, nn)
301 real(kind=kreal),
intent(in) :: du(3, nn)
302 real(kind=kreal),
intent(in) :: ddu(3, nn)
303 integer(kind=kint),
intent(in) :: cdsys_id
304 real(kind=kreal),
intent(inout) :: coords(3, 3)
305 real(kind=kreal),
intent(out) :: qf(nn*3)
307 integer,
intent(in) :: iter
308 real(kind=kreal),
intent(in) :: time
309 real(kind=kreal),
intent(in) :: tincr
310 integer(kind=kint),
intent(in) :: nn_p
311 real(kind=kreal),
intent(in) :: lambda(nn_p)
312 real(kind=kreal),
intent(inout) :: ddlambda(nn_p)
313 real(kind=kreal),
intent(in),
optional :: tt(nn)
314 real(kind=kreal),
intent(in),
optional :: t0(nn)
316 integer(kind=kint) :: flag
317 integer(kind=kint),
parameter :: ndof = 3
318 real(kind=kreal) :: d(6, 6), b(6, ndof*nn), b1(6, ndof*nn)
319 real(kind=kreal) :: gderiv(nn, 3), gdispderiv(3, 3), det, wg
320 integer(kind=kint) :: i, lx, mtype, serr
321 real(kind=kreal) :: naturalcoord(3), rot(3, 3), spfunc(nn), coordsys(3, 3)
322 real(kind=kreal) :: totaldisp(3, nn), elem(3, nn), elem1(3, nn)
323 real(kind=kreal) :: dstrain(6), dstress(6), dumstress(3, 3), dum(3, 3)
324 real(kind=kreal) :: trd, p_bak
325 real(kind=kreal) :: ttc, tt0, outa(1), ina(1), epsth(6)
327 integer(kind=kint) :: nb
328 integer(kind=kint) :: na_p, nb_p
329 integer(kind=kint) :: isize, jsize
330 integer(kind=kint) :: jsize1, jsize2, jsize3
331 real(kind=kreal) :: totallambda(nn_p)
332 real(kind=kreal) :: stiff_up(3*nn, nn_p)
333 real(kind=kreal) :: stiff_pp(nn_p, nn_p), stiff_pp_inv(nn_p, nn_p)
334 real(kind=kreal) :: stiff_up_stiff_pp_inv(3*nn, nn_p)
335 real(kind=kreal) :: stiff_up_stiff_pp_inv_qf_p(3*nn)
336 real(kind=kreal) :: alpha_inv
337 real(kind=kreal) :: g
338 real(kind=kreal) :: qf_p(nn_p)
339 real(kind=kreal) :: stiff_up_ddu(nn_p)
340 real(kind=kreal) :: d2(6)
341 real(kind=kreal) :: bd2(3*nn)
342 real(kind=kreal) :: lambda_lx
343 real(kind=kreal) :: spfunc_p(nn_p)
345 stiff_up(:, :) = 0.0d0
346 stiff_pp(:, :) = 0.0d0
350 flag = gausses(1)%pMaterial%nlgeom_flag
351 elem(:, :) = ecoord(:, :)
352 totaldisp(:, :) = u(:, :)+( du(:, :)-ddu(:, :) )
354 if( flag ==
updatelag ) elem(:, :) = ecoord(:, :)+u(:, :)+( du(:, :)-ddu(:, :) )
358 coordsys(1, 1) = 1.0d0; coordsys(2, 2) = 1.0d0; coordsys(3, 3) = 1.0d0
369 if( cdsys_id > 0 )
then
371 if( serr == -1 ) stop
"Fail to setup local coordinate"
372 if( serr == -2 )
then
374 write(*, *)
"WARNING! Cannot setup local coordinate, it is modified automatically"
380 if( flag ==
totallag ) gdispderiv(1:3, 1:3) = matmul( totaldisp(1:3, 1:nn), gderiv(1:nn, 1:3) )
382 if( nn_p == 1 ) spfunc_p(1) = 1.0d0
387 lambda_lx = lambda_lx+spfunc_p(na_p)*lambda(na_p)
390 mtype = gausses(lx)%pMaterial%mtype
396 if(
present( tt ) .and.
present( t0 ) )
then
398 ttc = dot_product( tt, spfunc )
399 tt0 = dot_product( t0, spfunc )
400 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys, ttc )
401 if( ( iter <= 1 ) .or. ( flag ==
totallag ) )
then
403 call fetch_tabledata(
mc_themoexp, gausses(lx)%pMaterial%dict, outa, ierr, ina )
404 if( ierr ) outa(1) = gausses(lx)%pMaterial%variables(
m_expansion)
405 epsth(1:3) = outa(1)*( ttc-tt0 )
408 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
415 b(1, jsize1) = gderiv(nb, 1)
418 b(4, jsize1) = gderiv(nb, 2)
420 b(6, jsize1) = gderiv(nb, 3)
422 b(2, jsize2) = gderiv(nb, 2)
424 b(4, jsize2) = gderiv(nb, 1)
425 b(5, jsize2) = gderiv(nb, 3)
429 b(3, jsize3) = gderiv(nb, 3)
431 b(5, jsize3) = gderiv(nb, 2)
432 b(6, jsize3) = gderiv(nb, 1)
441 b1(1, jsize1) = gdispderiv(1, 1)*gderiv(nb, 1)
442 b1(2, jsize1) = gdispderiv(1, 2)*gderiv(nb, 2)
443 b1(3, jsize1) = gdispderiv(1, 3)*gderiv(nb, 3)
444 b1(4, jsize1) = gdispderiv(1, 2)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 2)
445 b1(5, jsize1) = gdispderiv(1, 2)*gderiv(nb, 3)+gdispderiv(1, 3)*gderiv(nb, 2)
446 b1(6, jsize1) = gdispderiv(1, 3)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 3)
447 b1(1, jsize2) = gdispderiv(2, 1)*gderiv(nb, 1)
448 b1(2, jsize2) = gdispderiv(2, 2)*gderiv(nb, 2)
449 b1(3, jsize2) = gdispderiv(2, 3)*gderiv(nb, 3)
450 b1(4, jsize2) = gdispderiv(2, 2)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 2)
451 b1(5, jsize2) = gdispderiv(2, 2)*gderiv(nb, 3)+gdispderiv(2, 3)*gderiv(nb, 2)
452 b1(6, jsize2) = gdispderiv(2, 3)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 3)
453 b1(1, jsize3) = gdispderiv(3, 1)*gderiv(nb, 1)
454 b1(2, jsize3) = gdispderiv(3, 2)*gderiv(nb, 2)
455 b1(3, jsize3) = gdispderiv(3, 3)*gderiv(nb, 3)
456 b1(4, jsize3) = gdispderiv(3, 2)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 2)
457 b1(5, jsize3) = gdispderiv(3, 2)*gderiv(nb, 3)+gdispderiv(3, 3)*gderiv(nb, 2)
458 b1(6, jsize3) = gdispderiv(3, 3)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 3)
461 b(:, jsize) = b(:, jsize)+b1(:, jsize)
466 bd2(isize) = dot_product( b(:, isize), d2 )
470 forall( isize = 1:3*nn, nb_p = 1:nn_p )
471 stiff_up(isize, nb_p) = stiff_up(isize, nb_p)+wg*bd2(isize)*spfunc_p(nb_p)
475 forall( na_p = 1:nn_p, nb_p = 1:nn_p )
476 stiff_pp(na_p, nb_p) = stiff_pp(na_p, nb_p)-wg*alpha_inv*spfunc_p(na_p)*spfunc_p(nb_p)
479 qf_p(1:nn_p) = qf_p(1:nn_p)+wg*spfunc_p(1:nn_p)*( g-alpha_inv*lambda_lx )
485 stiff_pp_inv(1, 1) = 1.0d0/stiff_pp(1, 1)
488 write(6, *)
'Error: nn_p should be equal to 1.'
494 stiff_up_ddu(na_p) = 0.0d0
498 stiff_up_ddu(na_p) = stiff_up_ddu(na_p)+stiff_up(jsize, na_p)*ddu(i, nb)
504 ddlambda(na_p) = dot_product( stiff_pp_inv(na_p, :), -qf_p-stiff_up_ddu )
507 totaldisp(:, :) = u(:, :)+du(:, :)
508 totallambda(:) = lambda(:)+ddlambda(:)
510 stiff_up(:, :) = 0.0d0
511 stiff_pp(:, :) = 0.0d0
517 elem(:, :) = ecoord(:, :)
519 elem(:, :) = ecoord(:, :)+u(:, :)+0.5d0*du(:, :)
520 elem1(:, :) = ecoord(:, :)+u(:, :)+du(:, :)
532 if( cdsys_id > 0 )
then
534 if( serr == -1 ) stop
"Fail to setup local coordinate"
535 if( serr == -2 )
then
537 write(*, *)
"WARNING! Cannot setup local coordinate, it is modified automatically"
544 gdispderiv(1:3, 1:3) = matmul( du(1:3, 1:nn), gderiv(1:nn, 1:3) )
546 gdispderiv(1:3, 1:3) = matmul( totaldisp(1:3, 1:nn), gderiv(1:nn, 1:3) )
549 if( nn_p == 1 ) spfunc_p(1) = 1.0d0
554 lambda_lx = lambda_lx+spfunc_p(na_p)*totallambda(na_p)
557 mtype = gausses(lx)%pMaterial%mtype
562 dstrain(1) = gdispderiv(1, 1)
563 dstrain(2) = gdispderiv(2, 2)
564 dstrain(3) = gdispderiv(3, 3)
565 dstrain(4) = gdispderiv(1, 2)+gdispderiv(2, 1)
566 dstrain(5) = gdispderiv(2, 3)+gdispderiv(3, 2)
567 dstrain(6) = gdispderiv(3, 1)+gdispderiv(1, 3)
568 dstrain(:) = dstrain(:)-epsth(:)
572 dstrain(1) = dstrain(1)+0.5d0*dot_product( gdispderiv(:, 1), gdispderiv(:, 1) )
573 dstrain(2) = dstrain(2)+0.5d0*dot_product( gdispderiv(:, 2), gdispderiv(:, 2) )
574 dstrain(3) = dstrain(3)+0.5d0*dot_product( gdispderiv(:, 3), gdispderiv(:, 3) )
575 dstrain(4) = dstrain(4)+dot_product( gdispderiv(:, 1), gdispderiv(:, 2) )
576 dstrain(5) = dstrain(5)+dot_product( gdispderiv(:, 2), gdispderiv(:, 3) )
577 dstrain(6) = dstrain(6)+dot_product( gdispderiv(:, 1), gdispderiv(:, 3) )
583 rot(1, 2) = 0.5d0*( gdispderiv(1, 2)-gdispderiv(2, 1) ); rot(2, 1) = -rot(1, 2)
584 rot(2, 3) = 0.5d0*( gdispderiv(2, 3)-gdispderiv(3, 2) ); rot(3, 2) = -rot(2, 3)
585 rot(1, 3) = 0.5d0*( gdispderiv(1, 3)-gdispderiv(3, 1) ); rot(3, 1) = -rot(1, 3)
586 gausses(lx)%strain(1:6) = gausses(lx)%strain_bak(1:6)+dstrain(1:6)+epsth(:)
588 gausses(lx)%strain(1:6) = dstrain(1:6)+epsth(:)
593 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
596 p_bak = ( gausses(lx)%stress_bak(1)+gausses(lx)%stress_bak(2)+gausses(lx)%stress_bak(3) )/3.0d0
597 dumstress(1, 1) = gausses(lx)%stress_bak(1)-p_bak
598 dumstress(2, 2) = gausses(lx)%stress_bak(2)-p_bak
599 dumstress(3, 3) = gausses(lx)%stress_bak(3)-p_bak
600 dumstress(1, 2) = gausses(lx)%stress_bak(4); dumstress(2, 1) = dumstress(1, 2)
601 dumstress(2, 3) = gausses(lx)%stress_bak(5); dumstress(3, 2) = dumstress(2, 3)
602 dumstress(3, 1) = gausses(lx)%stress_bak(6); dumstress(1, 3) = dumstress(3, 1)
603 trd = dstrain(1)+dstrain(2)+dstrain(3)
604 dum(:, :) = dumstress+matmul( rot, dumstress )-matmul( dumstress, rot )-dumstress*trd
605 dstress(1:6) = matmul( d(1:6, 1:6), dstrain(1:6) )
606 gausses(lx)%stress(1) = dum(1, 1)+dstress(1)+lambda_lx
607 gausses(lx)%stress(2) = dum(2, 2)+dstress(2)+lambda_lx
608 gausses(lx)%stress(3) = dum(3, 3)+dstress(3)+lambda_lx
609 gausses(lx)%stress(4) = dum(1, 2)+dstress(4)
610 gausses(lx)%stress(5) = dum(2, 3)+dstress(5)
611 gausses(lx)%stress(6) = dum(3, 1)+dstress(6)
613 call stressupdate_up( gausses(lx),
d3, dstrain, gausses(lx)%stress, lambda_lx, g, coordsys )
616 gausses(lx)%stress_out(1:6) = gausses(lx)%stress(1:6)
617 gausses(lx)%strain_out(1:6) = gausses(lx)%strain(1:6)
621 if(
present( tt ) .and.
present( t0 ) )
then
623 ttc = dot_product( tt, spfunc )
624 tt0 = dot_product( t0, spfunc )
625 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys, ttc )
626 if( ( iter <= 1 ) .or. ( flag ==
totallag ) )
then
628 call fetch_tabledata(
mc_themoexp, gausses(lx)%pMaterial%dict, outa, ierr, ina )
629 if( ierr ) outa(1) = gausses(lx)%pMaterial%variables(
m_expansion)
630 epsth(1:3) = outa(1)*( ttc-tt0 )
633 call matlmatrix_up( gausses(lx),
d3, d, lambda_lx, d2, alpha_inv, g, time, tincr, coordsys )
639 call getglobalderiv( etype, nn, naturalcoord, elem1, det, gderiv )
647 b(1, jsize1) = gderiv(nb, 1)
650 b(4, jsize1) = gderiv(nb, 2)
652 b(6, jsize1) = gderiv(nb, 3)
654 b(2, jsize2) = gderiv(nb, 2)
656 b(4, jsize2) = gderiv(nb, 1)
657 b(5, jsize2) = gderiv(nb, 3)
661 b(3, jsize3) = gderiv(nb, 3)
663 b(5, jsize3) = gderiv(nb, 2)
664 b(6, jsize3) = gderiv(nb, 1)
673 b1(1, jsize1) = gdispderiv(1, 1)*gderiv(nb, 1)
674 b1(2, jsize1) = gdispderiv(1, 2)*gderiv(nb, 2)
675 b1(3, jsize1) = gdispderiv(1, 3)*gderiv(nb, 3)
676 b1(4, jsize1) = gdispderiv(1, 2)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 2)
677 b1(5, jsize1) = gdispderiv(1, 2)*gderiv(nb, 3)+gdispderiv(1, 3)*gderiv(nb, 2)
678 b1(6, jsize1) = gdispderiv(1, 3)*gderiv(nb, 1)+gdispderiv(1, 1)*gderiv(nb, 3)
679 b1(1, jsize2) = gdispderiv(2, 1)*gderiv(nb, 1)
680 b1(2, jsize2) = gdispderiv(2, 2)*gderiv(nb, 2)
681 b1(3, jsize2) = gdispderiv(2, 3)*gderiv(nb, 3)
682 b1(4, jsize2) = gdispderiv(2, 2)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 2)
683 b1(5, jsize2) = gdispderiv(2, 2)*gderiv(nb, 3)+gdispderiv(2, 3)*gderiv(nb, 2)
684 b1(6, jsize2) = gdispderiv(2, 3)*gderiv(nb, 1)+gdispderiv(2, 1)*gderiv(nb, 3)
685 b1(1, jsize3) = gdispderiv(3, 1)*gderiv(nb, 1)
686 b1(2, jsize3) = gdispderiv(3, 2)*gderiv(nb, 2)
687 b1(3, jsize3) = gdispderiv(3, 3)*gderiv(nb, 3)
688 b1(4, jsize3) = gdispderiv(3, 2)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 2)
689 b1(5, jsize3) = gdispderiv(3, 2)*gderiv(nb, 3)+gdispderiv(3, 3)*gderiv(nb, 2)
690 b1(6, jsize3) = gdispderiv(3, 3)*gderiv(nb, 1)+gdispderiv(3, 1)*gderiv(nb, 3)
693 b(:, jsize) = b(:, jsize)+b1(:, jsize)
698 bd2(isize) = dot_product( b(:, isize), d2 )
702 forall( isize = 1:3*nn, nb_p = 1:nn_p )
703 stiff_up(isize, nb_p) = stiff_up(isize, nb_p)+wg*bd2(isize)*spfunc_p(nb_p)
707 forall( na_p = 1:nn_p, nb_p = 1:nn_p )
708 stiff_pp(na_p, nb_p) = stiff_pp(na_p, nb_p)-wg*alpha_inv*spfunc_p(na_p)*spfunc_p(nb_p)
712 qf(1:3*nn) = qf(1:3*nn)+wg*matmul( gausses(lx)%stress(1:6), b(1:6, 1:3*nn) )
714 qf_p(1:nn_p) = qf_p(1:nn_p)+wg*spfunc_p(1:nn_p)*( g-alpha_inv*lambda_lx )
720 stiff_pp_inv(1, 1) = 1.0d0/stiff_pp(1, 1)
723 write(6, *)
'Error: nn_p should be equal to 1.'
728 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) )
731 stiff_up_stiff_pp_inv_qf_p(isize) = dot_product( stiff_up_stiff_pp_inv(isize, :), qf_p )
736 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_expansion
character(len=dict_key_length) mc_themoexp
integer(kind=kint), parameter d3
integer(kind=kint), parameter totallag
integer(kind=kint), parameter infinitesimal
integer(kind=kint), parameter updatelag
This modules defines a structure to record history dependent parameter in static analysis.
All data should be recorded in every quadrature points.