20 real(kind=kreal),
intent(in) :: refx(3)
21 real(kind=kreal),
intent(in) :: xl(3,2)
22 real(kind=kreal),
intent(out) :: le
23 real(kind=kreal),
intent(out) :: t(3,3)
25 real(kind=kreal) :: dl
26 real(kind=kreal),
parameter :: tol = 1.d-08
28 t(1,1) = xl(1,2) - xl(1,1)
29 t(1,2) = xl(2,2) - xl(2,1)
30 t(1,3) = xl(3,2) - xl(3,1)
31 le = sqrt(t(1,1)*t(1,1)+t(1,2)*t(1,2)+t(1,3)*t(1,3))
42 t(2,1) = (t(3,2)*t(1,3) - t(3,3)*t(1,2))
43 t(2,2) = (t(3,3)*t(1,1) - t(3,1)*t(1,3))
44 t(2,3) = (t(3,1)*t(1,2) - t(3,2)*t(1,1))
45 dl = sqrt(t(2,1)*t(2,1)+t(2,2)*t(2,2)+t(2,3)*t(2,3))
47 stop
"Bad reference for beam element!"
52 t(3,1) = t(1,2)*t(2,3) - t(1,3)*t(2,2)
53 t(3,2) = t(1,3)*t(2,1) - t(1,1)*t(2,3)
54 t(3,3) = t(1,1)*t(2,2) - t(1,2)*t(2,1)
61 real(kind=kreal),
intent(in) :: le
62 real(kind=kreal),
intent(in) :: section(:)
63 real(kind=kreal),
intent(in) :: e, p
64 integer(kind=kint),
intent(in),
optional :: formulation
65 real(kind=kreal),
intent(out) :: stiff(12,12)
67 real(kind=kreal) :: g, l2, l3, a, iy, iz, jx, ea
68 real(kind=kreal) :: phi_y, phi_z
69 real(kind=kreal) :: kyy, kyz, kzz, kryy, kryz
70 real(kind=kreal) :: kww, kwy, krr, krz
74 g = e/(2.d0*(1.d0 + p))
76 a = section(4); iy = section(5); iz = section(6); jx = section(7)
80 if(
present(formulation) )
then
83 phi_y = 12.d0*e*iz/(g*a*l2)
84 phi_z = 12.d0*e*iy/(g*a*l2)
89 kyy = 12.d0*e*iz/(l3*(1.d0 + phi_y))
90 kyz = 6.d0*e*iz/(l2*(1.d0 + phi_y))
91 kzz = (4.d0 + phi_y)*e*iz/(le*(1.d0 + phi_y))
92 kryz = (2.d0 - phi_y)*e*iz/(le*(1.d0 + phi_y))
93 kww = 12.d0*e*iy/(l3*(1.d0 + phi_z))
94 kwy = 6.d0*e*iy/(l2*(1.d0 + phi_z))
95 krr = (4.d0 + phi_z)*e*iy/(le*(1.d0 + phi_z))
96 krz = (2.d0 - phi_z)*e*iy/(le*(1.d0 + phi_z))
113 stiff(10,4) = -g*jx/le
138 stiff(4,10) = -g*jx/le
139 stiff(10,10) = g*jx/le
153 subroutine stf_beam(etype,nn,ecoord,section,E,P,STIFF,formulation)
154 integer,
intent(in) :: etype
155 integer,
intent(in) :: nn
156 real(kind=kreal),
intent(in) :: ecoord(3,nn)
157 real(kind=kreal),
intent(in) :: section(:)
158 real(kind=kreal),
intent(in) :: e,p
159 real(kind=kreal),
intent(out) :: stiff(nn*6,nn*6)
160 integer(kind=kint),
intent(in),
optional :: formulation
162 real(kind=kreal) :: le, trans(3,3), refv(3), transt(3,3)
165 call framtr(refv, ecoord, le, trans)
166 transt= transpose(trans)
170 stiff(1:3,:) = matmul( transt, stiff(1:3,:) )
171 stiff(4:6,:) = matmul( transt, stiff(4:6,:) )
172 stiff(7:9,:) = matmul( transt, stiff(7:9,:) )
173 stiff(10:12,:) = matmul( transt, stiff(10:12,:) )
175 stiff(:,1:3) = matmul( stiff(:,1:3), trans )
176 stiff(:,4:6) = matmul( stiff(:,4:6), trans )
177 stiff(:,7:9) = matmul( stiff(:,7:9), trans )
178 stiff(:,10:12) = matmul( stiff(:,10:12), trans )
183 subroutine updatest_beam(etype,nn,ecoord,u,du,section,gausses,QF,formulation)
184 integer,
intent(in) :: etype
185 integer,
intent(in) :: nn
186 real(kind=kreal),
intent(in) :: ecoord(3,nn)
187 real(kind=kreal),
intent(in) :: u(6,nn)
188 real(kind=kreal),
intent(in) :: du(6,nn)
189 real(kind=kreal),
intent(in) :: section(:)
191 real(kind=kreal),
intent(out) :: qf(nn*6)
192 integer(kind=kint),
intent(in),
optional :: formulation
194 real(kind=kreal) :: stiff(nn*6, nn*6), totaldisp(nn*6)
195 integer(kind=kint) :: i, j
196 real(kind=kreal) :: e,p
198 e = gausses(1)%pMaterial%variables(m_youngs)
199 p = gausses(1)%pMaterial%variables(m_poisson)
201 call stf_beam(etype,nn,ecoord,section,e,p,stiff,formulation)
205 totaldisp(6*(i-1)+j) = u(j,i) + du(j,i)
209 qf = matmul(stiff,totaldisp)
217 real(kind=kreal),
intent(in) :: ecoord(3, 4), section(:)
219 real(kind=kreal),
intent(out) :: stiff(12, 12)
220 integer(kind=kint),
intent(in) :: formulation
222 integer(kind=kint) :: i, j
223 integer(kind=kint),
parameter :: mixed_to_natural(12) = &
224 (/ 1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12 /)
225 real(kind=kreal) :: natural_stiff(12, 12), ee, pp
227 ee = gausses(1)%pMaterial%variables(m_youngs)
228 pp = gausses(1)%pMaterial%variables(m_poisson)
229 call stf_beam(611, 2, ecoord(1:3,1:2), section, ee, pp, natural_stiff, formulation)
233 stiff(i,j) = natural_stiff(mixed_to_natural(i), mixed_to_natural(j))
242 real(kind=kreal),
intent(in) :: ecoord(3, 4), u(3, 4), du(3, 4), section(:)
244 real(kind=kreal),
intent(out) :: qf(12)
245 integer(kind=kint),
intent(in) :: formulation
247 integer(kind=kint) :: i
248 integer(kind=kint),
parameter :: mixed_to_natural(12) = &
249 (/ 1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12 /)
250 real(kind=kreal) :: beam_u(6, 2), beam_du(6, 2), natural_qf(12)
252 beam_u(1:3,1:2) = u(1:3,1:2)
253 beam_u(4:6,1:2) = u(1:3,3:4)
254 beam_du(1:3,1:2) = du(1:3,1:2)
255 beam_du(4:6,1:2) = du(1:3,3:4)
256 call updatest_beam(611, 2, ecoord(1:3,1:2), beam_u, beam_du, section, &
257 gausses, natural_qf, formulation)
260 qf(i) = natural_qf(mixed_to_natural(i))
265 subroutine nqm_beam(nn, ecoord, gausses, section, ul, rnqm, formulation)
267 integer(kind=kint),
intent(in) :: nn
268 real(kind=kreal),
intent(in) :: ecoord(3, nn)
270 real(kind=kreal),
intent(in) :: section(:)
271 real(kind=kreal),
intent(in) :: ul(nn*6)
272 real(kind=kreal),
intent(out) :: rnqm(nn*6)
273 integer(kind=kint),
intent(in),
optional :: formulation
275 real(kind=kreal) :: ee, pp, le, refv(3), trans(3,3), ec(3,2)
276 real(kind=kreal) :: stiff(nn*6, nn*6)
278 ee = gausses(1)%pMaterial%variables(m_youngs)
279 pp = gausses(1)%pMaterial%variables(m_poisson)
281 refv(1:3) = section(1:3)
282 ec(1:3, 1) = ecoord(1:3, 1)
283 ec(1:3, 2) = ecoord(1:3, 2)
284 call framtr(refv, ec, le, trans)
288 rnqm = matmul(stiff, ul)
293 subroutine nodalstress_beam(etype, nn, ecoord, gausses, section, edisp, ndstrain, ndstress, formulation)
295 integer(kind=kint),
intent(in) :: etype
296 integer(kind=kint),
intent(in) :: nn
297 real(kind=kreal),
intent(in) :: ecoord(3, nn)
299 real(kind=kreal),
intent(in) :: section(:)
300 real(kind=kreal),
intent(in) :: edisp(6, nn)
301 real(kind=kreal),
intent(out) :: ndstrain(nn, 6)
302 real(kind=kreal),
intent(out) :: ndstress(nn, 6)
303 integer(kind=kint),
intent(in),
optional :: formulation
305 integer(kind=kint) :: k
306 real(kind=kreal) :: ee, pi
307 real(kind=kreal) :: radius, angle(6)
308 real(kind=kreal) :: refv(3), ec(3,2), trans(3,3), le
309 real(kind=kreal) :: ul(nn*6), rnqm(nn*6)
310 real(kind=kreal) :: x2_hat, x3_hat, eps
311 real(kind=kreal) :: stress_i, stress_j
313 pi = 4.0d0*datan(1.0d0)
315 ee = gausses(1)%pMaterial%variables(m_youngs)
317 refv(1:3) = section(1:3)
318 ec(1:3, 1) = ecoord(1:3, 1)
319 ec(1:3, 2) = ecoord(1:3, 2)
320 call framtr(refv, ec, le, trans)
322 radius = gausses(1)%pMaterial%variables(m_beam_radius)
323 angle(1) = gausses(1)%pMaterial%variables(m_beam_angle1)
324 angle(2) = gausses(1)%pMaterial%variables(m_beam_angle2)
325 angle(3) = gausses(1)%pMaterial%variables(m_beam_angle3)
326 angle(4) = gausses(1)%pMaterial%variables(m_beam_angle4)
327 angle(5) = gausses(1)%pMaterial%variables(m_beam_angle5)
328 angle(6) = gausses(1)%pMaterial%variables(m_beam_angle6)
331 ul(1:3) = matmul(trans, edisp(1:3, 1))
332 ul(4:6) = matmul(trans, edisp(4:6, 1))
333 ul(7:9) = matmul(trans, edisp(1:3, 2))
334 ul(10:12) = matmul(trans, edisp(4:6, 2))
336 eps = (ul(7)-ul(1))/le
337 call nqm_beam(nn, ecoord, gausses, section, ul, rnqm, formulation)
344 angle(k) = angle(k)/180.0d0*pi
345 x2_hat = radius*dcos(angle(k))
346 x3_hat = radius*dsin(angle(k))
348 stress_i = ee*eps + x2_hat*rnqm(6)/section(6) - x3_hat*rnqm(5)/section(5)
349 stress_j = ee*eps - x2_hat*rnqm(12)/section(6) + x3_hat*rnqm(11)/section(5)
352 gausses(1)%strain(k) = eps
353 gausses(1)%stress(k) = 0.5d0*(stress_i + stress_j)
354 gausses(1)%strain_out(k) = gausses(1)%strain(k)
355 gausses(1)%stress_out(k) = gausses(1)%stress(k)
359 ndstress(1, k) = stress_i
363 ndstress(2, k) = stress_j
368 gausses(1)%nqm(1:nn*6) = rnqm(1:nn*6)
376 real(kind=kreal),
intent(out) :: estrain(6)
377 real(kind=kreal),
intent(out) :: estress(6)
378 real(kind=kreal),
intent(out) :: enqm(12)
380 estrain(1:6) = gausses(1)%strain_out(1:6)
381 estress(1:6) = gausses(1)%stress_out(1:6)
382 enqm(1:12) = gausses(1)%nqm(1:12)
390 (etype, nn, ecoord, gausses, section, stiff, tt, t0)
397 integer,
intent(in) :: etype
398 integer,
intent(in) :: nn
399 real(kind=kreal),
intent(in) :: ecoord(3, nn)
401 real(kind=kreal),
intent(in) :: section(:)
402 real(kind=kreal),
intent(out) :: stiff(nn*3, nn*3)
403 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
407 real(kind = kreal) :: refv(3)
408 real(kind = kreal) :: trans(3, 3), transt(3, 3)
409 real(kind = kreal) :: ec(3, 2)
410 real(kind = kreal) :: tempc
411 real(kind = kreal) :: ina1(1), outa1(2)
412 real(kind = kreal) :: ee, pp
413 real(kind = kreal) :: le
414 real(kind = kreal) :: l2, l3, g, a, iy, iz, jx
415 real(kind = kreal) :: ea, twoe, foure, twelvee, sixe
425 ec(1, 1) = ecoord(1, 1)
426 ec(2, 1) = ecoord(2, 1)
427 ec(3, 1) = ecoord(3, 1)
428 ec(1, 2) = ecoord(1, 2)
429 ec(2, 2) = ecoord(2, 2)
430 ec(3, 2) = ecoord(3, 2)
432 call framtr(refv, ec, le, trans)
434 transt= transpose( trans )
441 if(
present( tt ) )
then
443 tempc = 0.5d0*( tt(1)+tt(2) )
449 if(
present( tt ) )
then
453 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
465 ee = gausses(1)%pMaterial%variables(m_youngs)
466 pp = gausses(1)%pMaterial%variables(m_poisson)
477 g = ee/( 2.0d0*( 1.0d0+pp ) )
491 twelvee = 12.0d0*ee/l3
502 stiff(2, 2) = twelvee*iz
504 stiff(9, 2) = sixe*iz
506 stiff(5, 2) = -twelvee*iz
507 stiff(12, 2) = sixe*iz
509 stiff(3, 3) = twelvee*iy
511 stiff(8, 3) = -sixe*iy
513 stiff(6, 3) = -twelvee*iy
514 stiff(11, 3) = -sixe*iy
517 stiff(7, 7) = g*jx/le
519 stiff(10, 7) = -g*jx/le
522 stiff(3, 8) = -sixe*iy
524 stiff(8, 8) = foure*iy
526 stiff(6, 8) = sixe*iy
528 stiff(11, 8) = twoe*iy
531 stiff(2, 9) = sixe*iz
533 stiff(9, 9) = foure*iz
535 stiff(5, 9) = -sixe*iz
537 stiff(12, 9) = twoe*iz
545 stiff(2, 5) = -twelvee*iz
547 stiff(9, 5) = -sixe*iz
549 stiff(5, 5) = twelvee*iz
551 stiff(12, 5) = -sixe*iz
554 stiff(3, 6) = -twelvee*iy
556 stiff(8, 6) = sixe*iy
558 stiff(6, 6) = twelvee*iy
560 stiff(11, 6) = sixe*iy
563 stiff(7, 10) = -g*jx/le
564 stiff(10, 10) = g*jx/le
566 stiff(3, 11) = -sixe*iy
568 stiff(8, 11) = twoe*iy
570 stiff(6, 11) = sixe*iy
571 stiff(11, 11) = foure*iy
573 stiff(2, 12) = sixe*iz
575 stiff(9, 12) = twoe*iz
577 stiff(5, 12) = -sixe*iz
578 stiff(12, 12) = foure*iz
582 stiff( 1:3, :) = matmul( transt, stiff( 1:3, :) )
583 stiff( 4:6, :) = matmul( transt, stiff( 4:6, :) )
584 stiff( 7:9, :) = matmul( transt, stiff( 7:9, :) )
585 stiff(10:12, :) = matmul( transt, stiff(10:12, :) )
587 stiff(:, 1:3) = matmul( stiff(:, 1:3), trans )
588 stiff(:, 4:6) = matmul( stiff(:, 4:6), trans )
589 stiff(:, 7:9) = matmul( stiff(:, 7:9), trans )
590 stiff(:, 10:12) = matmul( stiff(:, 10:12), trans )
604 (etype, nn, ecoord, gausses, section, stiff, tt, t0, tdisp, rnqm)
611 INTEGER,
INTENT(IN) :: etype
612 INTEGER,
INTENT(IN) :: nn
613 REAL(kind=kreal),
INTENT(IN) :: ecoord(3, nn)
615 REAL(kind=kreal),
INTENT(IN) :: section(:)
616 REAL(kind=kreal),
INTENT(OUT) :: stiff(nn*3, nn*3)
617 REAL(kind=kreal),
INTENT(IN),
OPTIONAL :: tt(nn), t0(nn)
619 REAL(kind=kreal),
INTENT(INOUT) :: tdisp(nn*3)
620 REAL(kind=kreal),
INTENT(OUT) :: rnqm(nn*3)
622 REAL(kind=kreal) :: tdisp1(nn*3)
626 REAL(kind = kreal) :: refv(3)
627 REAL(kind = kreal) :: trans(3, 3), transt(3, 3)
628 REAL(kind = kreal) :: ec(3, 2)
629 REAL(kind = kreal) :: tempc
630 REAL(kind = kreal) :: ina1(1), outa1(2)
631 REAL(kind = kreal) :: ee, pp
632 REAL(kind = kreal) :: le
633 REAL(kind = kreal) :: l2, l3, g, a, iy, iz, jx
634 REAL(kind = kreal) :: ea, twoe, foure, twelvee, sixe
644 ec(1, 1) = ecoord(1, 1)
645 ec(2, 1) = ecoord(2, 1)
646 ec(3, 1) = ecoord(3, 1)
647 ec(1, 2) = ecoord(1, 2)
648 ec(2, 2) = ecoord(2, 2)
649 ec(3, 2) = ecoord(3, 2)
651 CALL framtr(refv, ec, le, trans)
653 transt= transpose( trans )
660 IF(
PRESENT( tt ) )
THEN
662 tempc = 0.5d0*( tt(1)+tt(2) )
668 IF(
PRESENT( tt ) )
THEN
672 CALL fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
684 ee = gausses(1)%pMaterial%variables(m_youngs)
685 pp = gausses(1)%pMaterial%variables(m_poisson)
696 g = ee/( 2.0d0*( 1.0d0+pp ) )
712 twelvee = 12.0d0*ee/l3
723 stiff(2, 2) = twelvee*iz
725 stiff(9, 2) = sixe*iz
727 stiff(5, 2) = -twelvee*iz
728 stiff(12, 2) = sixe*iz
730 stiff(3, 3) = twelvee*iy
732 stiff(8, 3) = -sixe*iy
734 stiff(6, 3) = -twelvee*iy
735 stiff(11, 3) = -sixe*iy
738 stiff(7, 7) = g*jx/le
740 stiff(10, 7) = -g*jx/le
743 stiff(3, 8) = -sixe*iy
745 stiff(8, 8) = foure*iy
747 stiff(6, 8) = sixe*iy
749 stiff(11, 8) = twoe*iy
752 stiff(2, 9) = sixe*iz
754 stiff(9, 9) = foure*iz
756 stiff(5, 9) = -sixe*iz
758 stiff(12, 9) = twoe*iz
766 stiff(2, 5) = -twelvee*iz
768 stiff(9, 5) = -sixe*iz
770 stiff(5, 5) = twelvee*iz
772 stiff(12, 5) = -sixe*iz
775 stiff(3, 6) = -twelvee*iy
777 stiff(8, 6) = sixe*iy
779 stiff(6, 6) = twelvee*iy
781 stiff(11, 6) = sixe*iy
784 stiff(7, 10) = -g*jx/le
785 stiff(10, 10) = g*jx/le
787 stiff(3, 11) = -sixe*iy
789 stiff(8, 11) = twoe*iy
791 stiff(6, 11) = sixe*iy
792 stiff(11, 11) = foure*iy
794 stiff(2, 12) = sixe*iz
796 stiff(9, 12) = twoe*iz
798 stiff(5, 12) = -sixe*iz
799 stiff(12, 12) = foure*iz
802 tdisp1( 1: 3 ) = matmul( trans, tdisp( 1: 3 ) )
803 tdisp1( 4: 6 ) = matmul( trans, tdisp( 4: 6 ) )
804 tdisp1( 7: 9 ) = matmul( trans, tdisp( 7: 9 ) )
805 tdisp1( 10:12 ) = matmul( trans, tdisp( 10:12 ) )
807 rnqm( 1:12 ) = matmul( stiff, tdisp1 )
817 subroutine dl_beam_641(etype, nn, xx, yy, zz, rho, ltype, params, &
818 section, vect, nsize)
835 integer(kind = kint),
intent(in) :: etype, nn
836 real(kind = kreal),
intent(in) :: xx(:), yy(:), zz(:)
837 real(kind = kreal),
intent(in) :: params(0:6)
838 real(kind = kreal),
intent(in) :: section(:)
839 real(kind = kreal),
intent(inout) :: vect(:)
840 real(kind = kreal) :: rho
841 integer(kind = kint) :: ltype, nsize
843 integer(kind = kint) :: ndof
845 integer(kind = kint) :: ivol, isuf, nod(nn)
846 integer(kind = kint) :: i ,surtype, nsur
847 real(kind = kreal) :: vx, vy, vz, val, a, aa
858 if( ltype .LT. 10 )
then
862 else if( ltype .GE. 10 )
then
866 call getsubface(etype, ltype/10, surtype, nod)
878 vect(1:nsize) = 0.0d0
884 if( ivol .EQ. 1 )
then
886 if( ltype .EQ. 4 )
then
888 aa = dsqrt( ( xx(2)-xx(1) )*( xx(2)-xx(1) ) &
889 +( yy(2)-yy(1) )*( yy(2)-yy(1) ) &
890 +( zz(2)-zz(1) )*( zz(2)-zz(1) ) )
897 vx = vx/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
898 vy = vy/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
899 vz = vz/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
903 vect(3*i-2) = val*rho*a*0.5d0*aa*vx
904 vect(3*i-1) = val*rho*a*0.5d0*aa*vy
905 vect(3*i ) = val*rho*a*0.5d0*aa*vz
934 (etype, nn, ndof, xx, yy, zz, tt, t0, &
935 gausses, section, vect)
945 integer(kind = kint),
intent(in) :: etype
946 integer(kind = kint),
intent(in) :: nn
947 integer(kind = kint),
intent(in) :: ndof
949 real(kind = kreal),
intent(in) :: section(:)
950 real(kind = kreal),
intent(in) :: xx(nn), yy(nn), zz(nn)
951 real(kind = kreal),
intent(in) :: tt(nn), t0(nn)
952 real(kind = kreal),
intent(out) :: vect(nn*ndof)
956 real(kind = kreal) :: tempc, temp0
957 real(kind = kreal) :: ecoord(3, nn)
958 real(kind = kreal) :: ec(3, 2)
959 real(kind = kreal) :: ina1(1), outa1(2)
960 real(kind = kreal) :: ina2(1), outa2(1)
961 real(kind = kreal) :: alp, alp0
962 real(kind = kreal) :: ee, pp
963 real(kind = kreal) :: a
964 real(kind = kreal) :: refv(3)
965 real(kind = kreal) :: g
966 real(kind = kreal) :: le
967 real(kind = kreal) :: trans(3, 3), transt(3, 3)
973 ecoord(1, 1:nn) = xx(1:nn)
974 ecoord(2, 1:nn) = yy(1:nn)
975 ecoord(3, 1:nn) = zz(1:nn)
979 tempc = 0.5d0*( tt(1)+tt(2) )
980 temp0 = 0.5d0*( t0(1)+t0(2) )
986 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
990 ee = gausses(1)%pMaterial%variables(m_youngs)
991 pp = gausses(1)%pMaterial%variables(m_poisson)
1004 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1006 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1014 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1016 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1022 refv(1) = section(1)
1023 refv(2) = section(2)
1024 refv(3) = section(3)
1026 ec(1, 1) = ecoord(1, 1)
1027 ec(2, 1) = ecoord(2, 1)
1028 ec(3, 1) = ecoord(3, 1)
1029 ec(1, 2) = ecoord(1, 2)
1030 ec(2, 2) = ecoord(2, 2)
1031 ec(3, 2) = ecoord(3, 2)
1033 call framtr(refv, ec, le, trans)
1035 transt= transpose( trans )
1041 g = ee/( 2.0d0*( 1.0d0+pp ))
1063 vect( 1:3) = matmul( transt, vect(1:3) )
1064 vect( 4:6) = matmul( transt, vect(4:6) )
1065 vect( 7:9) = matmul( transt, vect(7:9) )
1066 vect(10:12) = matmul( transt, vect(10:12) )
1081 (etype, nn, ecoord, gausses, section, edisp, &
1082 ndstrain, ndstress, tt, t0, ntemp)
1090 integer(kind = kint),
intent(in) :: etype
1091 integer(kind = kint),
intent(in) :: nn
1092 real(kind = kreal),
intent(in) :: ecoord(3, nn)
1094 real(kind = kreal),
intent(in) :: section(:)
1095 real(kind = kreal),
intent(in) :: edisp(3, nn)
1096 real(kind = kreal),
intent(out) :: ndstrain(nn, 6)
1097 real(kind = kreal),
intent(out) :: ndstress(nn, 6)
1098 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
1099 integer(kind = kint),
intent(in) :: ntemp
1103 real(kind=kreal) :: stiffx(12, 12)
1104 real(kind=kreal) :: tdisp(12)
1105 real(kind=kreal) :: rnqm(12)
1109 integer(kind = kint) :: i, j, k, jj
1111 real(kind = kreal) :: tempc, temp0
1112 real(kind = kreal) :: ina1(1), outa1(2)
1113 real(kind = kreal) :: ina2(1), outa2(1)
1114 real(kind = kreal) :: alp, alp0
1115 real(kind = kreal) :: ee, pp
1116 real(kind = kreal) :: a, radius, angle(6)
1117 real(kind = kreal) :: refv(3)
1118 real(kind = kreal) :: le, l2, l3
1119 real(kind = kreal) :: trans(3, 3), transt(3, 3)
1120 real(kind = kreal) :: edisp_hat(3, nn)
1121 real(kind = kreal) :: ec(3, 2)
1122 real(kind = kreal) :: t(3, 3), t_hat(3, 3)
1123 real(kind = kreal) :: t_hat_tmp(3, 3)
1124 real(kind = kreal) :: e(3, 3), e_hat(3, 3)
1125 real(kind = kreal) :: e_hat_tmp(3, 3)
1126 real(kind = kreal) :: x1_hat, x2_hat, x3_hat
1127 real(kind = kreal) :: pi
1131 alp = 0.0d0; alp0 = 0.0d0
1132 tempc = 0.0d0; temp0 = 0.0d0
1136 pi = 4.0d0*datan( 1.0d0 )
1140 if(
present( tt ) .AND.
present( t0 ) )
then
1142 tempc = 0.5d0*( tt(1)+tt(2) )
1143 temp0 = 0.5d0*( t0(1)+t0(2) )
1149 if( ntemp .EQ. 1 )
then
1153 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
1165 ee = gausses(1)%pMaterial%variables(m_youngs)
1166 pp = gausses(1)%pMaterial%variables(m_poisson)
1177 if( ntemp .EQ. 1 )
then
1181 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1183 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1191 if( ntemp .EQ. 1 )
then
1195 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1197 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1205 refv(1) = section(1)
1206 refv(2) = section(2)
1207 refv(3) = section(3)
1209 ec(1, 1) = ecoord(1, 1)
1210 ec(2, 1) = ecoord(2, 1)
1211 ec(3, 1) = ecoord(3, 1)
1212 ec(1, 2) = ecoord(1, 2)
1213 ec(2, 2) = ecoord(2, 2)
1214 ec(3, 2) = ecoord(3, 2)
1216 call framtr(refv, ec, le, trans)
1218 transt= transpose( trans )
1227 radius = gausses(1)%pMaterial%variables(m_beam_radius)
1229 angle(1) = gausses(1)%pMaterial%variables(m_beam_angle1)
1230 angle(2) = gausses(1)%pMaterial%variables(m_beam_angle2)
1231 angle(3) = gausses(1)%pMaterial%variables(m_beam_angle3)
1232 angle(4) = gausses(1)%pMaterial%variables(m_beam_angle4)
1233 angle(5) = gausses(1)%pMaterial%variables(m_beam_angle5)
1234 angle(6) = gausses(1)%pMaterial%variables(m_beam_angle6)
1242 angle(k) = angle(k)/180.0d0*pi
1244 x2_hat = radius*dcos( angle(k) )
1245 x3_hat = radius*dsin( angle(k) )
1254 edisp_hat(i, j) = trans(i, 1)*edisp(1, j) &
1255 +trans(i, 2)*edisp(2, j) &
1256 +trans(i, 3)*edisp(3, j)
1259 tdisp(jj) = edisp(i,j)
1270 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1273 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1274 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1275 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1276 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1277 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1278 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1279 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1280 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1281 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1283 if( ntemp .EQ. 1 )
then
1291 e_hat_tmp(1:3,:) = matmul( trans, e_hat(1:3,:) )
1292 t_hat_tmp(1:3,:) = matmul( trans, t_hat(1:3,:) )
1294 e(:, 1:3) = matmul( e_hat_tmp(:,1:3), transt )
1295 t(:, 1:3) = matmul( t_hat_tmp(:,1:3), transt )
1297 gausses(1)%strain(k) = e_hat(1, 1)
1298 gausses(1)%stress(k) = t_hat(1, 1)
1301 gausses(1)%strain_out(k) = gausses(1)%strain(k)
1302 gausses(1)%stress_out(k) = gausses(1)%stress(k)
1306 ndstrain(1, k) = 0.0d0
1307 ndstrain(2, k) = 0.0d0
1308 ndstrain(3, k) = 0.0d0
1309 ndstrain(4, k) = 0.0d0
1311 ndstress(1, k) = 0.0d0
1312 ndstress(2, k) = 0.0d0
1313 ndstress(3, k) = 0.0d0
1314 ndstress(4, k) = 0.0d0
1321 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1324 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1325 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1326 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1327 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1328 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1329 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1330 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1331 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1332 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1334 if( ntemp .EQ. 1 )
then
1342 e_hat_tmp(1:3, :) = matmul( trans, e_hat(1:3, :) )
1343 t_hat_tmp(1:3, :) = matmul( trans, t_hat(1:3, :) )
1345 e(:, 1:3) = matmul( e_hat_tmp(:, 1:3), transt )
1346 t(:, 1:3) = matmul( t_hat_tmp(:, 1:3), transt )
1348 ndstrain(1, k) = e_hat(1, 1)
1349 ndstress(1, k) = t_hat(1, 1)
1356 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1359 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1360 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1361 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1362 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1363 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1364 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1365 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1366 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1367 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1369 if( ntemp .EQ. 1 )
then
1377 e_hat_tmp(1:3, :) = matmul( trans, e_hat(1:3, :) )
1378 t_hat_tmp(1:3, :) = matmul( trans, t_hat(1:3, :) )
1380 e(:, 1:3) = matmul( e_hat_tmp(:, 1:3), transt )
1381 t(:, 1:3) = matmul( t_hat_tmp(:, 1:3), transt )
1383 ndstrain(2, k) = e_hat(1, 1)
1384 ndstress(2, k) = t_hat(1, 1)
1394 (etype, nn, ecoord, gausses, section, stiffx, tt, t0, tdisp, rnqm )
1396 gausses(1)%nqm(1:12) = rnqm(1:12)
1417 ( gausses, estrain, estress, enqm )
1426 real(kind = kreal),
intent(out) :: estrain(6)
1427 real(kind = kreal),
intent(out) :: estress(6)
1428 real(kind = kreal),
intent(out) :: enqm(12)
1432 estrain(1:6) = gausses(1)%strain_out(1:6)
1433 estress(1:6) = gausses(1)%stress_out(1:6)
1434 enqm(1:12) = gausses(1)%nqm(1:12)
1440 (etype, nn, ecoord, u, du, gausses, section, qf, tt, t0)
1447 integer,
intent(in) :: etype
1448 integer,
intent(in) :: nn
1449 real(kind=kreal),
intent(in) :: ecoord(3, nn)
1450 real(kind=kreal),
intent(in) :: u(3, nn)
1451 real(kind=kreal),
intent(in) :: du(3, nn)
1453 real(kind=kreal),
intent(in) :: section(:)
1454 real(kind=kreal),
intent(out) :: qf(nn*3)
1455 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
1458 real(kind = kreal) :: stiff(nn*3, nn*3), totaldisp(nn*3)
1459 integer(kind = kint) :: i
1461 call stf_beam_641(etype, nn, ecoord, gausses, section, stiff, tt, t0)
1465 totaldisp(3*i-2:3*i) = u(1:3,i) + du(1:3,i)
1468 qf = matmul(stiff,totaldisp)
This module encapsulate the basic functions of all elements provide by this software.
integer(kind=kind(2)) function getnumberofnodes(etype)
Obtain number of nodes of the element.
subroutine getsubface(intype, innumber, outtype, nodes)
Find the definition of surface of the element.
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter kel611timoshenko
real(kind=kreal), pointer ref_temp
REFTEMP.
This module provide common functions of beam elements.
subroutine updatest_beam(etype, nn, ecoord, u, du, section, gausses, QF, formulation)
subroutine nqm_beam_641(etype, nn, ecoord, gausses, section, stiff, tt, t0, tdisp, rnqm)
Calculate N,Q,M vector of BEAM elements.
subroutine updatest_beam_641(etype, nn, ecoord, u, du, gausses, section, qf, tt, t0)
subroutine stf_beam_local(le, section, E, P, formulation, stiff)
Calculate the local stiffness matrix of 611 beam elements.
subroutine stf_beam(etype, nn, ecoord, section, E, P, STIFF, formulation)
Calculate stiff matrix of BEAM elements.
subroutine nqm_beam(nn, ecoord, gausses, section, ul, rnqm, formulation)
Calculate elemental section force (N, Q, M) of 611 beam elements.
subroutine framtr(refx, xl, le, t)
subroutine elementalstress_beam(gausses, estrain, estress, enqm)
Copy elemental stress/strain/NQM of 611 beam elements from Gauss status.
subroutine dl_beam_641(etype, nn, xx, yy, zz, rho, ltype, params, section, vect, nsize)
subroutine elementalstress_beam_641(gausses, estrain, estress, enqm)
subroutine updatest_beam_641_from_611(ecoord, u, du, gausses, section, qf, formulation)
subroutine nodalstress_beam_641(etype, nn, ecoord, gausses, section, edisp, ndstrain, ndstress, tt, t0, ntemp)
subroutine tload_beam_641(etype, nn, ndof, xx, yy, zz, tt, t0, gausses, section, vect)
subroutine stf_beam_641_from_611(ecoord, gausses, section, stiff, formulation)
subroutine stf_beam_641(etype, nn, ecoord, gausses, section, stiff, tt, t0)
Calculate stiff matrix of BEAM elements.
subroutine nodalstress_beam(etype, nn, ecoord, gausses, section, edisp, ndstrain, ndstress, formulation)
Calculate NODAL STRESS and STRAIN of 611 beam elements.
This module provides aux functions.
This modules defines a structure to record history dependent parameter in static analysis.
All data should be recorded in every quadrature points.