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)
214 subroutine nqm_beam(nn, ecoord, gausses, section, ul, rnqm, formulation)
216 integer(kind=kint),
intent(in) :: nn
217 real(kind=kreal),
intent(in) :: ecoord(3, nn)
219 real(kind=kreal),
intent(in) :: section(:)
220 real(kind=kreal),
intent(in) :: ul(nn*6)
221 real(kind=kreal),
intent(out) :: rnqm(nn*6)
222 integer(kind=kint),
intent(in),
optional :: formulation
224 real(kind=kreal) :: ee, pp, le, refv(3), trans(3,3), ec(3,2)
225 real(kind=kreal) :: stiff(nn*6, nn*6)
227 ee = gausses(1)%pMaterial%variables(m_youngs)
228 pp = gausses(1)%pMaterial%variables(m_poisson)
230 refv(1:3) = section(1:3)
231 ec(1:3, 1) = ecoord(1:3, 1)
232 ec(1:3, 2) = ecoord(1:3, 2)
233 call framtr(refv, ec, le, trans)
237 rnqm = matmul(stiff, ul)
242 subroutine nodalstress_beam(etype, nn, ecoord, gausses, section, edisp, ndstrain, ndstress, formulation)
244 integer(kind=kint),
intent(in) :: etype
245 integer(kind=kint),
intent(in) :: nn
246 real(kind=kreal),
intent(in) :: ecoord(3, nn)
248 real(kind=kreal),
intent(in) :: section(:)
249 real(kind=kreal),
intent(in) :: edisp(6, nn)
250 real(kind=kreal),
intent(out) :: ndstrain(nn, 6)
251 real(kind=kreal),
intent(out) :: ndstress(nn, 6)
252 integer(kind=kint),
intent(in),
optional :: formulation
254 integer(kind=kint) :: k
255 real(kind=kreal) :: ee, pi
256 real(kind=kreal) :: radius, angle(6)
257 real(kind=kreal) :: refv(3), ec(3,2), trans(3,3), le
258 real(kind=kreal) :: ul(nn*6), rnqm(nn*6)
259 real(kind=kreal) :: x2_hat, x3_hat, eps
260 real(kind=kreal) :: stress_i, stress_j
262 pi = 4.0d0*datan(1.0d0)
264 ee = gausses(1)%pMaterial%variables(m_youngs)
266 refv(1:3) = section(1:3)
267 ec(1:3, 1) = ecoord(1:3, 1)
268 ec(1:3, 2) = ecoord(1:3, 2)
269 call framtr(refv, ec, le, trans)
271 radius = gausses(1)%pMaterial%variables(m_beam_radius)
272 angle(1) = gausses(1)%pMaterial%variables(m_beam_angle1)
273 angle(2) = gausses(1)%pMaterial%variables(m_beam_angle2)
274 angle(3) = gausses(1)%pMaterial%variables(m_beam_angle3)
275 angle(4) = gausses(1)%pMaterial%variables(m_beam_angle4)
276 angle(5) = gausses(1)%pMaterial%variables(m_beam_angle5)
277 angle(6) = gausses(1)%pMaterial%variables(m_beam_angle6)
280 ul(1:3) = matmul(trans, edisp(1:3, 1))
281 ul(4:6) = matmul(trans, edisp(4:6, 1))
282 ul(7:9) = matmul(trans, edisp(1:3, 2))
283 ul(10:12) = matmul(trans, edisp(4:6, 2))
285 eps = (ul(7)-ul(1))/le
286 call nqm_beam(nn, ecoord, gausses, section, ul, rnqm, formulation)
293 angle(k) = angle(k)/180.0d0*pi
294 x2_hat = radius*dcos(angle(k))
295 x3_hat = radius*dsin(angle(k))
297 stress_i = ee*eps + x2_hat*rnqm(6)/section(6) - x3_hat*rnqm(5)/section(5)
298 stress_j = ee*eps - x2_hat*rnqm(12)/section(6) + x3_hat*rnqm(11)/section(5)
301 gausses(1)%strain(k) = eps
302 gausses(1)%stress(k) = 0.5d0*(stress_i + stress_j)
303 gausses(1)%strain_out(k) = gausses(1)%strain(k)
304 gausses(1)%stress_out(k) = gausses(1)%stress(k)
308 ndstress(1, k) = stress_i
312 ndstress(2, k) = stress_j
317 gausses(1)%nqm(1:nn*6) = rnqm(1:nn*6)
325 real(kind=kreal),
intent(out) :: estrain(6)
326 real(kind=kreal),
intent(out) :: estress(6)
327 real(kind=kreal),
intent(out) :: enqm(12)
329 estrain(1:6) = gausses(1)%strain_out(1:6)
330 estress(1:6) = gausses(1)%stress_out(1:6)
331 enqm(1:12) = gausses(1)%nqm(1:12)
339 (etype, nn, ecoord, gausses, section, stiff, tt, t0)
346 integer,
intent(in) :: etype
347 integer,
intent(in) :: nn
348 real(kind=kreal),
intent(in) :: ecoord(3, nn)
350 real(kind=kreal),
intent(in) :: section(:)
351 real(kind=kreal),
intent(out) :: stiff(nn*3, nn*3)
352 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
356 real(kind = kreal) :: refv(3)
357 real(kind = kreal) :: trans(3, 3), transt(3, 3)
358 real(kind = kreal) :: ec(3, 2)
359 real(kind = kreal) :: tempc
360 real(kind = kreal) :: ina1(1), outa1(2)
361 real(kind = kreal) :: ee, pp
362 real(kind = kreal) :: le
363 real(kind = kreal) :: l2, l3, g, a, iy, iz, jx
364 real(kind = kreal) :: ea, twoe, foure, twelvee, sixe
374 ec(1, 1) = ecoord(1, 1)
375 ec(2, 1) = ecoord(2, 1)
376 ec(3, 1) = ecoord(3, 1)
377 ec(1, 2) = ecoord(1, 2)
378 ec(2, 2) = ecoord(2, 2)
379 ec(3, 2) = ecoord(3, 2)
381 call framtr(refv, ec, le, trans)
383 transt= transpose( trans )
390 if(
present( tt ) )
then
392 tempc = 0.5d0*( tt(1)+tt(2) )
398 if(
present( tt ) )
then
402 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
414 ee = gausses(1)%pMaterial%variables(m_youngs)
415 pp = gausses(1)%pMaterial%variables(m_poisson)
426 g = ee/( 2.0d0*( 1.0d0+pp ) )
440 twelvee = 12.0d0*ee/l3
451 stiff(2, 2) = twelvee*iz
453 stiff(9, 2) = sixe*iz
455 stiff(5, 2) = -twelvee*iz
456 stiff(12, 2) = sixe*iz
458 stiff(3, 3) = twelvee*iy
460 stiff(8, 3) = -sixe*iy
462 stiff(6, 3) = -twelvee*iy
463 stiff(11, 3) = -sixe*iy
466 stiff(7, 7) = g*jx/le
468 stiff(10, 7) = -g*jx/le
471 stiff(3, 8) = -sixe*iy
473 stiff(8, 8) = foure*iy
475 stiff(6, 8) = sixe*iy
477 stiff(11, 8) = twoe*iy
480 stiff(2, 9) = sixe*iz
482 stiff(9, 9) = foure*iz
484 stiff(5, 9) = -sixe*iz
486 stiff(12, 9) = twoe*iz
494 stiff(2, 5) = -twelvee*iz
496 stiff(9, 5) = -sixe*iz
498 stiff(5, 5) = twelvee*iz
500 stiff(12, 5) = -sixe*iz
503 stiff(3, 6) = -twelvee*iy
505 stiff(8, 6) = sixe*iy
507 stiff(6, 6) = twelvee*iy
509 stiff(11, 6) = sixe*iy
512 stiff(7, 10) = -g*jx/le
513 stiff(10, 10) = g*jx/le
515 stiff(3, 11) = -sixe*iy
517 stiff(8, 11) = twoe*iy
519 stiff(6, 11) = sixe*iy
520 stiff(11, 11) = foure*iy
522 stiff(2, 12) = sixe*iz
524 stiff(9, 12) = twoe*iz
526 stiff(5, 12) = -sixe*iz
527 stiff(12, 12) = foure*iz
531 stiff( 1:3, :) = matmul( transt, stiff( 1:3, :) )
532 stiff( 4:6, :) = matmul( transt, stiff( 4:6, :) )
533 stiff( 7:9, :) = matmul( transt, stiff( 7:9, :) )
534 stiff(10:12, :) = matmul( transt, stiff(10:12, :) )
536 stiff(:, 1:3) = matmul( stiff(:, 1:3), trans )
537 stiff(:, 4:6) = matmul( stiff(:, 4:6), trans )
538 stiff(:, 7:9) = matmul( stiff(:, 7:9), trans )
539 stiff(:, 10:12) = matmul( stiff(:, 10:12), trans )
553 (etype, nn, ecoord, gausses, section, stiff, tt, t0, tdisp, rnqm)
560 INTEGER,
INTENT(IN) :: etype
561 INTEGER,
INTENT(IN) :: nn
562 REAL(kind=kreal),
INTENT(IN) :: ecoord(3, nn)
564 REAL(kind=kreal),
INTENT(IN) :: section(:)
565 REAL(kind=kreal),
INTENT(OUT) :: stiff(nn*3, nn*3)
566 REAL(kind=kreal),
INTENT(IN),
OPTIONAL :: tt(nn), t0(nn)
568 REAL(kind=kreal),
INTENT(INOUT) :: tdisp(nn*3)
569 REAL(kind=kreal),
INTENT(OUT) :: rnqm(nn*3)
571 REAL(kind=kreal) :: tdisp1(nn*3)
575 REAL(kind = kreal) :: refv(3)
576 REAL(kind = kreal) :: trans(3, 3), transt(3, 3)
577 REAL(kind = kreal) :: ec(3, 2)
578 REAL(kind = kreal) :: tempc
579 REAL(kind = kreal) :: ina1(1), outa1(2)
580 REAL(kind = kreal) :: ee, pp
581 REAL(kind = kreal) :: le
582 REAL(kind = kreal) :: l2, l3, g, a, iy, iz, jx
583 REAL(kind = kreal) :: ea, twoe, foure, twelvee, sixe
593 ec(1, 1) = ecoord(1, 1)
594 ec(2, 1) = ecoord(2, 1)
595 ec(3, 1) = ecoord(3, 1)
596 ec(1, 2) = ecoord(1, 2)
597 ec(2, 2) = ecoord(2, 2)
598 ec(3, 2) = ecoord(3, 2)
600 CALL framtr(refv, ec, le, trans)
602 transt= transpose( trans )
609 IF(
PRESENT( tt ) )
THEN
611 tempc = 0.5d0*( tt(1)+tt(2) )
617 IF(
PRESENT( tt ) )
THEN
621 CALL fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
633 ee = gausses(1)%pMaterial%variables(m_youngs)
634 pp = gausses(1)%pMaterial%variables(m_poisson)
645 g = ee/( 2.0d0*( 1.0d0+pp ) )
661 twelvee = 12.0d0*ee/l3
672 stiff(2, 2) = twelvee*iz
674 stiff(9, 2) = sixe*iz
676 stiff(5, 2) = -twelvee*iz
677 stiff(12, 2) = sixe*iz
679 stiff(3, 3) = twelvee*iy
681 stiff(8, 3) = -sixe*iy
683 stiff(6, 3) = -twelvee*iy
684 stiff(11, 3) = -sixe*iy
687 stiff(7, 7) = g*jx/le
689 stiff(10, 7) = -g*jx/le
692 stiff(3, 8) = -sixe*iy
694 stiff(8, 8) = foure*iy
696 stiff(6, 8) = sixe*iy
698 stiff(11, 8) = twoe*iy
701 stiff(2, 9) = sixe*iz
703 stiff(9, 9) = foure*iz
705 stiff(5, 9) = -sixe*iz
707 stiff(12, 9) = twoe*iz
715 stiff(2, 5) = -twelvee*iz
717 stiff(9, 5) = -sixe*iz
719 stiff(5, 5) = twelvee*iz
721 stiff(12, 5) = -sixe*iz
724 stiff(3, 6) = -twelvee*iy
726 stiff(8, 6) = sixe*iy
728 stiff(6, 6) = twelvee*iy
730 stiff(11, 6) = sixe*iy
733 stiff(7, 10) = -g*jx/le
734 stiff(10, 10) = g*jx/le
736 stiff(3, 11) = -sixe*iy
738 stiff(8, 11) = twoe*iy
740 stiff(6, 11) = sixe*iy
741 stiff(11, 11) = foure*iy
743 stiff(2, 12) = sixe*iz
745 stiff(9, 12) = twoe*iz
747 stiff(5, 12) = -sixe*iz
748 stiff(12, 12) = foure*iz
751 tdisp1( 1: 3 ) = matmul( trans, tdisp( 1: 3 ) )
752 tdisp1( 4: 6 ) = matmul( trans, tdisp( 4: 6 ) )
753 tdisp1( 7: 9 ) = matmul( trans, tdisp( 7: 9 ) )
754 tdisp1( 10:12 ) = matmul( trans, tdisp( 10:12 ) )
756 rnqm( 1:12 ) = matmul( stiff, tdisp1 )
766 subroutine dl_beam_641(etype, nn, xx, yy, zz, rho, ltype, params, &
767 section, vect, nsize)
784 integer(kind = kint),
intent(in) :: etype, nn
785 real(kind = kreal),
intent(in) :: xx(:), yy(:), zz(:)
786 real(kind = kreal),
intent(in) :: params(0:6)
787 real(kind = kreal),
intent(in) :: section(:)
788 real(kind = kreal),
intent(inout) :: vect(:)
789 real(kind = kreal) :: rho
790 integer(kind = kint) :: ltype, nsize
792 integer(kind = kint) :: ndof
794 integer(kind = kint) :: ivol, isuf, nod(nn)
795 integer(kind = kint) :: i ,surtype, nsur
796 real(kind = kreal) :: vx, vy, vz, val, a, aa
807 if( ltype .LT. 10 )
then
811 else if( ltype .GE. 10 )
then
815 call getsubface(etype, ltype/10, surtype, nod)
827 vect(1:nsize) = 0.0d0
833 if( ivol .EQ. 1 )
then
835 if( ltype .EQ. 4 )
then
837 aa = dsqrt( ( xx(2)-xx(1) )*( xx(2)-xx(1) ) &
838 +( yy(2)-yy(1) )*( yy(2)-yy(1) ) &
839 +( zz(2)-zz(1) )*( zz(2)-zz(1) ) )
846 vx = vx/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
847 vy = vy/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
848 vz = vz/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
852 vect(3*i-2) = val*rho*a*0.5d0*aa*vx
853 vect(3*i-1) = val*rho*a*0.5d0*aa*vy
854 vect(3*i ) = val*rho*a*0.5d0*aa*vz
883 (etype, nn, ndof, xx, yy, zz, tt, t0, &
884 gausses, section, vect)
894 integer(kind = kint),
intent(in) :: etype
895 integer(kind = kint),
intent(in) :: nn
896 integer(kind = kint),
intent(in) :: ndof
898 real(kind = kreal),
intent(in) :: section(:)
899 real(kind = kreal),
intent(in) :: xx(nn), yy(nn), zz(nn)
900 real(kind = kreal),
intent(in) :: tt(nn), t0(nn)
901 real(kind = kreal),
intent(out) :: vect(nn*ndof)
905 real(kind = kreal) :: tempc, temp0
906 real(kind = kreal) :: ecoord(3, nn)
907 real(kind = kreal) :: ec(3, 2)
908 real(kind = kreal) :: ina1(1), outa1(2)
909 real(kind = kreal) :: ina2(1), outa2(1)
910 real(kind = kreal) :: alp, alp0
911 real(kind = kreal) :: ee, pp
912 real(kind = kreal) :: a
913 real(kind = kreal) :: refv(3)
914 real(kind = kreal) :: g
915 real(kind = kreal) :: le
916 real(kind = kreal) :: trans(3, 3), transt(3, 3)
922 ecoord(1, 1:nn) = xx(1:nn)
923 ecoord(2, 1:nn) = yy(1:nn)
924 ecoord(3, 1:nn) = zz(1:nn)
928 tempc = 0.5d0*( tt(1)+tt(2) )
929 temp0 = 0.5d0*( t0(1)+t0(2) )
935 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
939 ee = gausses(1)%pMaterial%variables(m_youngs)
940 pp = gausses(1)%pMaterial%variables(m_poisson)
953 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
955 if( ierr ) stop
"Fails in fetching expansion coefficient!"
963 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
965 if( ierr ) stop
"Fails in fetching expansion coefficient!"
975 ec(1, 1) = ecoord(1, 1)
976 ec(2, 1) = ecoord(2, 1)
977 ec(3, 1) = ecoord(3, 1)
978 ec(1, 2) = ecoord(1, 2)
979 ec(2, 2) = ecoord(2, 2)
980 ec(3, 2) = ecoord(3, 2)
982 call framtr(refv, ec, le, trans)
984 transt= transpose( trans )
990 g = ee/( 2.0d0*( 1.0d0+pp ))
1012 vect( 1:3) = matmul( transt, vect(1:3) )
1013 vect( 4:6) = matmul( transt, vect(4:6) )
1014 vect( 7:9) = matmul( transt, vect(7:9) )
1015 vect(10:12) = matmul( transt, vect(10:12) )
1030 (etype, nn, ecoord, gausses, section, edisp, &
1031 ndstrain, ndstress, tt, t0, ntemp)
1039 integer(kind = kint),
intent(in) :: etype
1040 integer(kind = kint),
intent(in) :: nn
1041 real(kind = kreal),
intent(in) :: ecoord(3, nn)
1043 real(kind = kreal),
intent(in) :: section(:)
1044 real(kind = kreal),
intent(in) :: edisp(3, nn)
1045 real(kind = kreal),
intent(out) :: ndstrain(nn, 6)
1046 real(kind = kreal),
intent(out) :: ndstress(nn, 6)
1047 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
1048 integer(kind = kint),
intent(in) :: ntemp
1052 real(kind=kreal) :: stiffx(12, 12)
1053 real(kind=kreal) :: tdisp(12)
1054 real(kind=kreal) :: rnqm(12)
1058 integer(kind = kint) :: i, j, k, jj
1060 real(kind = kreal) :: tempc, temp0
1061 real(kind = kreal) :: ina1(1), outa1(2)
1062 real(kind = kreal) :: ina2(1), outa2(1)
1063 real(kind = kreal) :: alp, alp0
1064 real(kind = kreal) :: ee, pp
1065 real(kind = kreal) :: a, radius, angle(6)
1066 real(kind = kreal) :: refv(3)
1067 real(kind = kreal) :: le, l2, l3
1068 real(kind = kreal) :: trans(3, 3), transt(3, 3)
1069 real(kind = kreal) :: edisp_hat(3, nn)
1070 real(kind = kreal) :: ec(3, 2)
1071 real(kind = kreal) :: t(3, 3), t_hat(3, 3)
1072 real(kind = kreal) :: t_hat_tmp(3, 3)
1073 real(kind = kreal) :: e(3, 3), e_hat(3, 3)
1074 real(kind = kreal) :: e_hat_tmp(3, 3)
1075 real(kind = kreal) :: x1_hat, x2_hat, x3_hat
1076 real(kind = kreal) :: pi
1080 alp = 0.0d0; alp0 = 0.0d0
1081 tempc = 0.0d0; temp0 = 0.0d0
1085 pi = 4.0d0*datan( 1.0d0 )
1089 if(
present( tt ) .AND.
present( t0 ) )
then
1091 tempc = 0.5d0*( tt(1)+tt(2) )
1092 temp0 = 0.5d0*( t0(1)+t0(2) )
1098 if( ntemp .EQ. 1 )
then
1102 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
1114 ee = gausses(1)%pMaterial%variables(m_youngs)
1115 pp = gausses(1)%pMaterial%variables(m_poisson)
1126 if( ntemp .EQ. 1 )
then
1130 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1132 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1140 if( ntemp .EQ. 1 )
then
1144 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1146 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1154 refv(1) = section(1)
1155 refv(2) = section(2)
1156 refv(3) = section(3)
1158 ec(1, 1) = ecoord(1, 1)
1159 ec(2, 1) = ecoord(2, 1)
1160 ec(3, 1) = ecoord(3, 1)
1161 ec(1, 2) = ecoord(1, 2)
1162 ec(2, 2) = ecoord(2, 2)
1163 ec(3, 2) = ecoord(3, 2)
1165 call framtr(refv, ec, le, trans)
1167 transt= transpose( trans )
1176 radius = gausses(1)%pMaterial%variables(m_beam_radius)
1178 angle(1) = gausses(1)%pMaterial%variables(m_beam_angle1)
1179 angle(2) = gausses(1)%pMaterial%variables(m_beam_angle2)
1180 angle(3) = gausses(1)%pMaterial%variables(m_beam_angle3)
1181 angle(4) = gausses(1)%pMaterial%variables(m_beam_angle4)
1182 angle(5) = gausses(1)%pMaterial%variables(m_beam_angle5)
1183 angle(6) = gausses(1)%pMaterial%variables(m_beam_angle6)
1191 angle(k) = angle(k)/180.0d0*pi
1193 x2_hat = radius*dcos( angle(k) )
1194 x3_hat = radius*dsin( angle(k) )
1203 edisp_hat(i, j) = trans(i, 1)*edisp(1, j) &
1204 +trans(i, 2)*edisp(2, j) &
1205 +trans(i, 3)*edisp(3, j)
1208 tdisp(jj) = edisp(i,j)
1219 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1222 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1223 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1224 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1225 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1226 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1227 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1228 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1229 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1230 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1232 if( ntemp .EQ. 1 )
then
1240 e_hat_tmp(1:3,:) = matmul( trans, e_hat(1:3,:) )
1241 t_hat_tmp(1:3,:) = matmul( trans, t_hat(1:3,:) )
1243 e(:, 1:3) = matmul( e_hat_tmp(:,1:3), transt )
1244 t(:, 1:3) = matmul( t_hat_tmp(:,1:3), transt )
1246 gausses(1)%strain(k) = e_hat(1, 1)
1247 gausses(1)%stress(k) = t_hat(1, 1)
1250 gausses(1)%strain_out(k) = gausses(1)%strain(k)
1251 gausses(1)%stress_out(k) = gausses(1)%stress(k)
1255 ndstrain(1, k) = 0.0d0
1256 ndstrain(2, k) = 0.0d0
1257 ndstrain(3, k) = 0.0d0
1258 ndstrain(4, k) = 0.0d0
1260 ndstress(1, k) = 0.0d0
1261 ndstress(2, k) = 0.0d0
1262 ndstress(3, k) = 0.0d0
1263 ndstress(4, k) = 0.0d0
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 ndstrain(1, k) = e_hat(1, 1)
1298 ndstress(1, k) = t_hat(1, 1)
1305 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1308 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1309 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1310 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1311 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1312 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1313 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1314 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1315 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1316 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1318 if( ntemp .EQ. 1 )
then
1326 e_hat_tmp(1:3, :) = matmul( trans, e_hat(1:3, :) )
1327 t_hat_tmp(1:3, :) = matmul( trans, t_hat(1:3, :) )
1329 e(:, 1:3) = matmul( e_hat_tmp(:, 1:3), transt )
1330 t(:, 1:3) = matmul( t_hat_tmp(:, 1:3), transt )
1332 ndstrain(2, k) = e_hat(1, 1)
1333 ndstress(2, k) = t_hat(1, 1)
1343 (etype, nn, ecoord, gausses, section, stiffx, tt, t0, tdisp, rnqm )
1345 gausses(1)%nqm(1:12) = rnqm(1:12)
1366 ( gausses, estrain, estress, enqm )
1375 real(kind = kreal),
intent(out) :: estrain(6)
1376 real(kind = kreal),
intent(out) :: estress(6)
1377 real(kind = kreal),
intent(out) :: enqm(12)
1381 estrain(1:6) = gausses(1)%strain_out(1:6)
1382 estress(1:6) = gausses(1)%stress_out(1:6)
1383 enqm(1:12) = gausses(1)%nqm(1:12)
1389 (etype, nn, ecoord, u, du, gausses, section, qf, tt, t0)
1396 integer,
intent(in) :: etype
1397 integer,
intent(in) :: nn
1398 real(kind=kreal),
intent(in) :: ecoord(3, nn)
1399 real(kind=kreal),
intent(in) :: u(3, nn)
1400 real(kind=kreal),
intent(in) :: du(3, nn)
1402 real(kind=kreal),
intent(in) :: section(:)
1403 real(kind=kreal),
intent(out) :: qf(nn*3)
1404 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
1407 real(kind = kreal) :: stiff(nn*3, nn*3), totaldisp(nn*3)
1408 integer(kind = kint) :: i
1410 call stf_beam_641(etype, nn, ecoord, gausses, section, stiff, tt, t0)
1414 totaldisp(3*i-2:3*i) = u(1:3,i) + du(1:3,i)
1417 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 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(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.