19 real(kind=kreal),
intent(in) :: refx(3)
20 real(kind=kreal),
intent(in) :: xl(3,2)
21 real(kind=kreal),
intent(out) :: le
22 real(kind=kreal),
intent(out) :: t(3,3)
24 real(kind=kreal) :: dl
25 real(kind=kreal),
parameter :: tol = 1.d-08
27 t(1,1) = xl(1,2) - xl(1,1)
28 t(1,2) = xl(2,2) - xl(2,1)
29 t(1,3) = xl(3,2) - xl(3,1)
30 le = sqrt(t(1,1)*t(1,1)+t(1,2)*t(1,2)+t(1,3)*t(1,3))
41 t(2,1) = (t(3,2)*t(1,3) - t(3,3)*t(1,2))
42 t(2,2) = (t(3,3)*t(1,1) - t(3,1)*t(1,3))
43 t(2,3) = (t(3,1)*t(1,2) - t(3,2)*t(1,1))
44 dl = sqrt(t(2,1)*t(2,1)+t(2,2)*t(2,2)+t(2,3)*t(2,3))
46 stop
"Bad reference for beam element!"
51 t(3,1) = t(1,2)*t(2,3) - t(1,3)*t(2,2)
52 t(3,2) = t(1,3)*t(2,1) - t(1,1)*t(2,3)
53 t(3,3) = t(1,1)*t(2,2) - t(1,2)*t(2,1)
59 subroutine stf_beam(etype,nn,ecoord,section,E,P,STIFF)
60 integer,
intent(in) :: etype
61 integer,
intent(in) :: nn
62 real(kind=kreal),
intent(in) :: ecoord(3,nn)
63 real(kind=kreal),
intent(in) :: section(:)
64 real(kind=kreal),
intent(in) :: e,p
65 real(kind=kreal),
intent(out) :: stiff(nn*6,nn*6)
67 real(kind=kreal) :: le, trans(3,3), refv(3), transt(3,3)
69 real(kind=kreal) :: l2, l3, a, iy, iz, jx, ea, twoe, foure, twelvee, sixe
72 call framtr(refv, ecoord, le, trans)
73 transt= transpose(trans)
77 g = e/(2.d0*(1.d0 + p))
79 a = section(4); iy=section(5); iz=section(6); jx=section(7)
91 stiff(2,2) = twelvee*iz;
93 stiff(8,2) = -twelvee*iz;
94 stiff(12,2) = sixe*iz;
96 stiff(3,3) = twelvee*iy;
97 stiff(5,3) = -sixe*iy;
98 stiff(9,3) = -twelvee*iy;
99 stiff(11,3) = -sixe*iy;
101 stiff(4,4) = g*jx/le;
102 stiff(10,4) = -g*jx/le;
104 stiff(3,5) = -sixe*iy;
105 stiff(5,5) = foure*iy;
106 stiff(9,5) = sixe*iy;
107 stiff(11,5) = twoe*iy;
109 stiff(2,6) = sixe*iz;
110 stiff(6,6) = foure*iz;
111 stiff(8,6) = -sixe*iz;
112 stiff(12,6) = twoe*iz;
117 stiff(2,8) = -twelvee*iz;
118 stiff(6,8) = -sixe*iz;
119 stiff(8,8) = twelvee*iz;
120 stiff(12,8) = -sixe*iz;
122 stiff(3,9) = -twelvee*iy;
123 stiff(5,9) = sixe*iy;
124 stiff(9,9) = twelvee*iy;
125 stiff(11,9) = sixe*iy;
127 stiff(4,10) = -g*jx/le;
128 stiff(10,10) = g*jx/le;
130 stiff(3,11) = -sixe*iy;
131 stiff(5,11) = twoe*iy;
132 stiff(9,11) = sixe*iy;
133 stiff(11,11) = foure*iy;
135 stiff(2,12) = sixe*iz;
136 stiff(6,12) = twoe*iz;
137 stiff(8,12) = -sixe*iz;
138 stiff(12,12) = foure*iz;
140 stiff(1:3,:) = matmul( transt, stiff(1:3,:) )
141 stiff(4:6,:) = matmul( transt, stiff(4:6,:) )
142 stiff(7:9,:) = matmul( transt, stiff(7:9,:) )
143 stiff(10:12,:) = matmul( transt, stiff(10:12,:) )
145 stiff(:,1:3) = matmul( stiff(:,1:3), trans )
146 stiff(:,4:6) = matmul( stiff(:,4:6), trans )
147 stiff(:,7:9) = matmul( stiff(:,7:9), trans )
148 stiff(:,10:12) = matmul( stiff(:,10:12), trans )
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) :: u(6,nn)
158 real(kind=kreal),
intent(in) :: du(6,nn)
159 real(kind=kreal),
intent(in) :: section(:)
161 real(kind=kreal),
intent(out) :: qf(nn*6)
163 real(kind=kreal) :: stiff(nn*6, nn*6), totaldisp(nn*6)
164 integer(kind=kint) :: i, j
165 real(kind=kreal) :: e,p
167 e = gausses(1)%pMaterial%variables(m_youngs)
168 p = gausses(1)%pMaterial%variables(m_poisson)
170 call stf_beam(etype,nn,ecoord,section,e,p,stiff)
174 totaldisp(6*(i-1)+j) = u(j,i) + du(j,i)
178 qf = matmul(stiff,totaldisp)
183 subroutine nqm_beam(nn, ecoord, gausses, section, ul, rnqm)
185 integer(kind=kint),
intent(in) :: nn
186 real(kind=kreal),
intent(in) :: ecoord(3, nn)
188 real(kind=kreal),
intent(in) :: section(:)
189 real(kind=kreal),
intent(in) :: ul(nn*6)
190 real(kind=kreal),
intent(out) :: rnqm(nn*6)
192 real(kind=kreal) :: ee, pp, g, le, l2, l3, refv(3), trans(3,3), ec(3,2)
193 real(kind=kreal) :: a, iy, iz, jx, ea, twoe, foure, twelvee, sixe
194 real(kind=kreal) :: stiff(nn*6, nn*6)
196 ee = gausses(1)%pMaterial%variables(m_youngs)
197 pp = gausses(1)%pMaterial%variables(m_poisson)
199 refv(1:3) = section(1:3)
200 ec(1:3, 1) = ecoord(1:3, 1)
201 ec(1:3, 2) = ecoord(1:3, 2)
202 call framtr(refv, ec, le, trans)
206 g = ee/(2.d0*(1.d0 + pp))
207 a = section(4); iy = section(5); iz = section(6); jx = section(7)
212 twelvee = 12.d0*ee/l3
217 stiff(1,1) = ea; stiff(7,1) = -ea
218 stiff(2,2) = twelvee*iz; stiff(6,2) = sixe*iz; stiff(8,2) = -twelvee*iz; stiff(12,2) = sixe*iz
219 stiff(3,3) = twelvee*iy; stiff(5,3) = -sixe*iy; stiff(9,3) = -twelvee*iy; stiff(11,3) = -sixe*iy
220 stiff(4,4) = g*jx/le; stiff(10,4) = -g*jx/le
221 stiff(3,5) = -sixe*iy; stiff(5,5) = foure*iy; stiff(9,5) = sixe*iy; stiff(11,5) = twoe*iy
222 stiff(2,6) = sixe*iz; stiff(6,6) = foure*iz; stiff(8,6) = -sixe*iz; stiff(12,6) = twoe*iz
223 stiff(1,7) = -ea; stiff(7,7) = ea
224 stiff(2,8) = -twelvee*iz; stiff(6,8) = -sixe*iz; stiff(8,8) = twelvee*iz; stiff(12,8) = -sixe*iz
225 stiff(3,9) = -twelvee*iy; stiff(5,9) = sixe*iy; stiff(9,9) = twelvee*iy; stiff(11,9) = sixe*iy
226 stiff(4,10) = -g*jx/le; stiff(10,10) = g*jx/le
227 stiff(3,11) = -sixe*iy; stiff(5,11) = twoe*iy; stiff(9,11) = sixe*iy; stiff(11,11) = foure*iy
228 stiff(2,12) = sixe*iz; stiff(6,12) = twoe*iz; stiff(8,12) = -sixe*iz; stiff(12,12) = foure*iz
230 rnqm = matmul(stiff, ul)
235 subroutine nodalstress_beam(etype, nn, ecoord, gausses, section, edisp, ndstrain, ndstress)
237 integer(kind=kint),
intent(in) :: etype
238 integer(kind=kint),
intent(in) :: nn
239 real(kind=kreal),
intent(in) :: ecoord(3, nn)
241 real(kind=kreal),
intent(in) :: section(:)
242 real(kind=kreal),
intent(in) :: edisp(6, nn)
243 real(kind=kreal),
intent(out) :: ndstrain(nn, 6)
244 real(kind=kreal),
intent(out) :: ndstress(nn, 6)
246 integer(kind=kint) :: k
247 real(kind=kreal) :: ee, pi
248 real(kind=kreal) :: radius, angle(6)
249 real(kind=kreal) :: refv(3), ec(3,2), trans(3,3), le, l2, l3
250 real(kind=kreal) :: ul(nn*6), rnqm(nn*6)
251 real(kind=kreal) :: uxi, uyi, uzi, ryi, rzi, uxj, uyj, uzj, ryj, rzj
252 real(kind=kreal) :: x1_hat, x2_hat, x3_hat, eps
254 pi = 4.0d0*datan(1.0d0)
256 ee = gausses(1)%pMaterial%variables(m_youngs)
258 refv(1:3) = section(1:3)
259 ec(1:3, 1) = ecoord(1:3, 1)
260 ec(1:3, 2) = ecoord(1:3, 2)
261 call framtr(refv, ec, le, trans)
265 radius = gausses(1)%pMaterial%variables(m_beam_radius)
266 angle(1) = gausses(1)%pMaterial%variables(m_beam_angle1)
267 angle(2) = gausses(1)%pMaterial%variables(m_beam_angle2)
268 angle(3) = gausses(1)%pMaterial%variables(m_beam_angle3)
269 angle(4) = gausses(1)%pMaterial%variables(m_beam_angle4)
270 angle(5) = gausses(1)%pMaterial%variables(m_beam_angle5)
271 angle(6) = gausses(1)%pMaterial%variables(m_beam_angle6)
274 ul(1:3) = matmul(trans, edisp(1:3, 1))
275 ul(4:6) = matmul(trans, edisp(4:6, 1))
276 ul(7:9) = matmul(trans, edisp(1:3, 2))
277 ul(10:12) = matmul(trans, edisp(4:6, 2))
279 uxi = ul(1); uyi = ul(2); uzi = ul(3); ryi = ul(5); rzi = ul(6)
280 uxj = ul(7); uyj = ul(8); uzj = ul(9); ryj = ul(11); rzj = ul(12)
289 angle(k) = angle(k)/180.0d0*pi
290 x2_hat = radius*dcos(angle(k))
291 x3_hat = radius*dsin(angle(k))
295 gausses(1)%strain(k) = eps
296 gausses(1)%stress(k) = ee*eps &
297 -ee*x2_hat*( (-6.0d0/l2+12.0d0*x1_hat/l3)*uyi + (-4.0d0/le+6.0d0*x1_hat/l2)*rzi &
298 +( 6.0d0/l2-12.0d0*x1_hat/l3)*uyj + (-2.0d0/le+6.0d0*x1_hat/l2)*rzj ) &
299 -ee*x3_hat*( (-6.0d0/l2+12.0d0*x1_hat/l3)*uzi + ( 4.0d0/le-6.0d0*x1_hat/l2)*ryi &
300 +( 6.0d0/l2-12.0d0*x1_hat/l3)*uzj + ( 2.0d0/le-6.0d0*x1_hat/l2)*ryj )
301 gausses(1)%strain_out(k) = gausses(1)%strain(k)
302 gausses(1)%stress_out(k) = gausses(1)%stress(k)
307 ndstress(1, k) = ee*eps &
308 -ee*x2_hat*( (-6.0d0/l2+12.0d0*x1_hat/l3)*uyi + (-4.0d0/le+6.0d0*x1_hat/l2)*rzi &
309 +( 6.0d0/l2-12.0d0*x1_hat/l3)*uyj + (-2.0d0/le+6.0d0*x1_hat/l2)*rzj ) &
310 -ee*x3_hat*( (-6.0d0/l2+12.0d0*x1_hat/l3)*uzi + ( 4.0d0/le-6.0d0*x1_hat/l2)*ryi &
311 +( 6.0d0/l2-12.0d0*x1_hat/l3)*uzj + ( 2.0d0/le-6.0d0*x1_hat/l2)*ryj )
316 ndstress(2, k) = ee*eps &
317 -ee*x2_hat*( (-6.0d0/l2+12.0d0*x1_hat/l3)*uyi + (-4.0d0/le+6.0d0*x1_hat/l2)*rzi &
318 +( 6.0d0/l2-12.0d0*x1_hat/l3)*uyj + (-2.0d0/le+6.0d0*x1_hat/l2)*rzj ) &
319 -ee*x3_hat*( (-6.0d0/l2+12.0d0*x1_hat/l3)*uzi + ( 4.0d0/le-6.0d0*x1_hat/l2)*ryi &
320 +( 6.0d0/l2-12.0d0*x1_hat/l3)*uzj + ( 2.0d0/le-6.0d0*x1_hat/l2)*ryj )
325 call nqm_beam(nn, ecoord, gausses, section, ul, rnqm)
326 gausses(1)%nqm(1:nn*6) = rnqm(1:nn*6)
334 real(kind=kreal),
intent(out) :: estrain(6)
335 real(kind=kreal),
intent(out) :: estress(6)
336 real(kind=kreal),
intent(out) :: enqm(12)
338 estrain(1:6) = gausses(1)%strain_out(1:6)
339 estress(1:6) = gausses(1)%stress_out(1:6)
340 enqm(1:12) = gausses(1)%nqm(1:12)
348 (etype, nn, ecoord, gausses, section, stiff, tt, t0)
355 integer,
intent(in) :: etype
356 integer,
intent(in) :: nn
357 real(kind=kreal),
intent(in) :: ecoord(3, nn)
359 real(kind=kreal),
intent(in) :: section(:)
360 real(kind=kreal),
intent(out) :: stiff(nn*3, nn*3)
361 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
365 real(kind = kreal) :: refv(3)
366 real(kind = kreal) :: trans(3, 3), transt(3, 3)
367 real(kind = kreal) :: ec(3, 2)
368 real(kind = kreal) :: tempc
369 real(kind = kreal) :: ina1(1), outa1(2)
370 real(kind = kreal) :: ee, pp
371 real(kind = kreal) :: le
372 real(kind = kreal) :: l2, l3, g, a, iy, iz, jx
373 real(kind = kreal) :: ea, twoe, foure, twelvee, sixe
383 ec(1, 1) = ecoord(1, 1)
384 ec(2, 1) = ecoord(2, 1)
385 ec(3, 1) = ecoord(3, 1)
386 ec(1, 2) = ecoord(1, 2)
387 ec(2, 2) = ecoord(2, 2)
388 ec(3, 2) = ecoord(3, 2)
390 call framtr(refv, ec, le, trans)
392 transt= transpose( trans )
399 if(
present( tt ) )
then
401 tempc = 0.5d0*( tt(1)+tt(2) )
407 if(
present( tt ) )
then
411 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
423 ee = gausses(1)%pMaterial%variables(m_youngs)
424 pp = gausses(1)%pMaterial%variables(m_poisson)
435 g = ee/( 2.0d0*( 1.0d0+pp ) )
449 twelvee = 12.0d0*ee/l3
460 stiff(2, 2) = twelvee*iz
462 stiff(9, 2) = sixe*iz
464 stiff(5, 2) = -twelvee*iz
465 stiff(12, 2) = sixe*iz
467 stiff(3, 3) = twelvee*iy
469 stiff(8, 3) = -sixe*iy
471 stiff(6, 3) = -twelvee*iy
472 stiff(11, 3) = -sixe*iy
475 stiff(7, 7) = g*jx/le
477 stiff(10, 7) = -g*jx/le
480 stiff(3, 8) = -sixe*iy
482 stiff(8, 8) = foure*iy
484 stiff(6, 8) = sixe*iy
486 stiff(11, 8) = twoe*iy
489 stiff(2, 9) = sixe*iz
491 stiff(9, 9) = foure*iz
493 stiff(5, 9) = -sixe*iz
495 stiff(12, 9) = twoe*iz
503 stiff(2, 5) = -twelvee*iz
505 stiff(9, 5) = -sixe*iz
507 stiff(5, 5) = twelvee*iz
509 stiff(12, 5) = -sixe*iz
512 stiff(3, 6) = -twelvee*iy
514 stiff(8, 6) = sixe*iy
516 stiff(6, 6) = twelvee*iy
518 stiff(11, 6) = sixe*iy
521 stiff(7, 10) = -g*jx/le
522 stiff(10, 10) = g*jx/le
524 stiff(3, 11) = -sixe*iy
526 stiff(8, 11) = twoe*iy
528 stiff(6, 11) = sixe*iy
529 stiff(11, 11) = foure*iy
531 stiff(2, 12) = sixe*iz
533 stiff(9, 12) = twoe*iz
535 stiff(5, 12) = -sixe*iz
536 stiff(12, 12) = foure*iz
540 stiff( 1:3, :) = matmul( transt, stiff( 1:3, :) )
541 stiff( 4:6, :) = matmul( transt, stiff( 4:6, :) )
542 stiff( 7:9, :) = matmul( transt, stiff( 7:9, :) )
543 stiff(10:12, :) = matmul( transt, stiff(10:12, :) )
545 stiff(:, 1:3) = matmul( stiff(:, 1:3), trans )
546 stiff(:, 4:6) = matmul( stiff(:, 4:6), trans )
547 stiff(:, 7:9) = matmul( stiff(:, 7:9), trans )
548 stiff(:, 10:12) = matmul( stiff(:, 10:12), trans )
562 (etype, nn, ecoord, gausses, section, stiff, tt, t0, tdisp, rnqm)
569 INTEGER,
INTENT(IN) :: etype
570 INTEGER,
INTENT(IN) :: nn
571 REAL(kind=kreal),
INTENT(IN) :: ecoord(3, nn)
573 REAL(kind=kreal),
INTENT(IN) :: section(:)
574 REAL(kind=kreal),
INTENT(OUT) :: stiff(nn*3, nn*3)
575 REAL(kind=kreal),
INTENT(IN),
OPTIONAL :: tt(nn), t0(nn)
577 REAL(kind=kreal),
INTENT(INOUT) :: tdisp(nn*3)
578 REAL(kind=kreal),
INTENT(OUT) :: rnqm(nn*3)
580 REAL(kind=kreal) :: tdisp1(nn*3)
584 REAL(kind = kreal) :: refv(3)
585 REAL(kind = kreal) :: trans(3, 3), transt(3, 3)
586 REAL(kind = kreal) :: ec(3, 2)
587 REAL(kind = kreal) :: tempc
588 REAL(kind = kreal) :: ina1(1), outa1(2)
589 REAL(kind = kreal) :: ee, pp
590 REAL(kind = kreal) :: le
591 REAL(kind = kreal) :: l2, l3, g, a, iy, iz, jx
592 REAL(kind = kreal) :: ea, twoe, foure, twelvee, sixe
602 ec(1, 1) = ecoord(1, 1)
603 ec(2, 1) = ecoord(2, 1)
604 ec(3, 1) = ecoord(3, 1)
605 ec(1, 2) = ecoord(1, 2)
606 ec(2, 2) = ecoord(2, 2)
607 ec(3, 2) = ecoord(3, 2)
609 CALL framtr(refv, ec, le, trans)
611 transt= transpose( trans )
618 IF(
PRESENT( tt ) )
THEN
620 tempc = 0.5d0*( tt(1)+tt(2) )
626 IF(
PRESENT( tt ) )
THEN
630 CALL fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
642 ee = gausses(1)%pMaterial%variables(m_youngs)
643 pp = gausses(1)%pMaterial%variables(m_poisson)
654 g = ee/( 2.0d0*( 1.0d0+pp ) )
670 twelvee = 12.0d0*ee/l3
681 stiff(2, 2) = twelvee*iz
683 stiff(9, 2) = sixe*iz
685 stiff(5, 2) = -twelvee*iz
686 stiff(12, 2) = sixe*iz
688 stiff(3, 3) = twelvee*iy
690 stiff(8, 3) = -sixe*iy
692 stiff(6, 3) = -twelvee*iy
693 stiff(11, 3) = -sixe*iy
696 stiff(7, 7) = g*jx/le
698 stiff(10, 7) = -g*jx/le
701 stiff(3, 8) = -sixe*iy
703 stiff(8, 8) = foure*iy
705 stiff(6, 8) = sixe*iy
707 stiff(11, 8) = twoe*iy
710 stiff(2, 9) = sixe*iz
712 stiff(9, 9) = foure*iz
714 stiff(5, 9) = -sixe*iz
716 stiff(12, 9) = twoe*iz
724 stiff(2, 5) = -twelvee*iz
726 stiff(9, 5) = -sixe*iz
728 stiff(5, 5) = twelvee*iz
730 stiff(12, 5) = -sixe*iz
733 stiff(3, 6) = -twelvee*iy
735 stiff(8, 6) = sixe*iy
737 stiff(6, 6) = twelvee*iy
739 stiff(11, 6) = sixe*iy
742 stiff(7, 10) = -g*jx/le
743 stiff(10, 10) = g*jx/le
745 stiff(3, 11) = -sixe*iy
747 stiff(8, 11) = twoe*iy
749 stiff(6, 11) = sixe*iy
750 stiff(11, 11) = foure*iy
752 stiff(2, 12) = sixe*iz
754 stiff(9, 12) = twoe*iz
756 stiff(5, 12) = -sixe*iz
757 stiff(12, 12) = foure*iz
760 tdisp1( 1: 3 ) = matmul( trans, tdisp( 1: 3 ) )
761 tdisp1( 4: 6 ) = matmul( trans, tdisp( 4: 6 ) )
762 tdisp1( 7: 9 ) = matmul( trans, tdisp( 7: 9 ) )
763 tdisp1( 10:12 ) = matmul( trans, tdisp( 10:12 ) )
765 rnqm( 1:12 ) = matmul( stiff, tdisp1 )
775 subroutine dl_beam_641(etype, nn, xx, yy, zz, rho, ltype, params, &
776 section, vect, nsize)
793 integer(kind = kint),
intent(in) :: etype, nn
794 real(kind = kreal),
intent(in) :: xx(:), yy(:), zz(:)
795 real(kind = kreal),
intent(in) :: params(0:6)
796 real(kind = kreal),
intent(in) :: section(:)
797 real(kind = kreal),
intent(inout) :: vect(:)
798 real(kind = kreal) :: rho
799 integer(kind = kint) :: ltype, nsize
801 integer(kind = kint) :: ndof
803 integer(kind = kint) :: ivol, isuf, nod(nn)
804 integer(kind = kint) :: i ,surtype, nsur
805 real(kind = kreal) :: vx, vy, vz, val, a, aa
816 if( ltype .LT. 10 )
then
820 else if( ltype .GE. 10 )
then
824 call getsubface(etype, ltype/10, surtype, nod)
836 vect(1:nsize) = 0.0d0
842 if( ivol .EQ. 1 )
then
844 if( ltype .EQ. 4 )
then
846 aa = dsqrt( ( xx(2)-xx(1) )*( xx(2)-xx(1) ) &
847 +( yy(2)-yy(1) )*( yy(2)-yy(1) ) &
848 +( zz(2)-zz(1) )*( zz(2)-zz(1) ) )
855 vx = vx/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
856 vy = vy/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
857 vz = vz/dsqrt( params(1)**2+params(2)**2+params(3)**2 )
861 vect(3*i-2) = val*rho*a*0.5d0*aa*vx
862 vect(3*i-1) = val*rho*a*0.5d0*aa*vy
863 vect(3*i ) = val*rho*a*0.5d0*aa*vz
892 (etype, nn, ndof, xx, yy, zz, tt, t0, &
893 gausses, section, vect)
903 integer(kind = kint),
intent(in) :: etype
904 integer(kind = kint),
intent(in) :: nn
905 integer(kind = kint),
intent(in) :: ndof
907 real(kind = kreal),
intent(in) :: section(:)
908 real(kind = kreal),
intent(in) :: xx(nn), yy(nn), zz(nn)
909 real(kind = kreal),
intent(in) :: tt(nn), t0(nn)
910 real(kind = kreal),
intent(out) :: vect(nn*ndof)
914 real(kind = kreal) :: tempc, temp0
915 real(kind = kreal) :: ecoord(3, nn)
916 real(kind = kreal) :: ec(3, 2)
917 real(kind = kreal) :: ina1(1), outa1(2)
918 real(kind = kreal) :: ina2(1), outa2(1)
919 real(kind = kreal) :: alp, alp0
920 real(kind = kreal) :: ee, pp
921 real(kind = kreal) :: a
922 real(kind = kreal) :: refv(3)
923 real(kind = kreal) :: g
924 real(kind = kreal) :: le
925 real(kind = kreal) :: trans(3, 3), transt(3, 3)
931 ecoord(1, 1:nn) = xx(1:nn)
932 ecoord(2, 1:nn) = yy(1:nn)
933 ecoord(3, 1:nn) = zz(1:nn)
937 tempc = 0.5d0*( tt(1)+tt(2) )
938 temp0 = 0.5d0*( t0(1)+t0(2) )
944 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
948 ee = gausses(1)%pMaterial%variables(m_youngs)
949 pp = gausses(1)%pMaterial%variables(m_poisson)
962 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
964 if( ierr ) stop
"Fails in fetching expansion coefficient!"
972 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
974 if( ierr ) stop
"Fails in fetching expansion coefficient!"
984 ec(1, 1) = ecoord(1, 1)
985 ec(2, 1) = ecoord(2, 1)
986 ec(3, 1) = ecoord(3, 1)
987 ec(1, 2) = ecoord(1, 2)
988 ec(2, 2) = ecoord(2, 2)
989 ec(3, 2) = ecoord(3, 2)
991 call framtr(refv, ec, le, trans)
993 transt= transpose( trans )
999 g = ee/( 2.0d0*( 1.0d0+pp ))
1021 vect( 1:3) = matmul( transt, vect(1:3) )
1022 vect( 4:6) = matmul( transt, vect(4:6) )
1023 vect( 7:9) = matmul( transt, vect(7:9) )
1024 vect(10:12) = matmul( transt, vect(10:12) )
1039 (etype, nn, ecoord, gausses, section, edisp, &
1040 ndstrain, ndstress, tt, t0, ntemp)
1048 integer(kind = kint),
intent(in) :: etype
1049 integer(kind = kint),
intent(in) :: nn
1050 real(kind = kreal),
intent(in) :: ecoord(3, nn)
1052 real(kind = kreal),
intent(in) :: section(:)
1053 real(kind = kreal),
intent(in) :: edisp(3, nn)
1054 real(kind = kreal),
intent(out) :: ndstrain(nn, 6)
1055 real(kind = kreal),
intent(out) :: ndstress(nn, 6)
1056 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
1057 integer(kind = kint),
intent(in) :: ntemp
1061 real(kind=kreal) :: stiffx(12, 12)
1062 real(kind=kreal) :: tdisp(12)
1063 real(kind=kreal) :: rnqm(12)
1067 integer(kind = kint) :: i, j, k, jj
1069 real(kind = kreal) :: tempc, temp0
1070 real(kind = kreal) :: ina1(1), outa1(2)
1071 real(kind = kreal) :: ina2(1), outa2(1)
1072 real(kind = kreal) :: alp, alp0
1073 real(kind = kreal) :: ee, pp
1074 real(kind = kreal) :: a, radius, angle(6)
1075 real(kind = kreal) :: refv(3)
1076 real(kind = kreal) :: le, l2, l3
1077 real(kind = kreal) :: trans(3, 3), transt(3, 3)
1078 real(kind = kreal) :: edisp_hat(3, nn)
1079 real(kind = kreal) :: ec(3, 2)
1080 real(kind = kreal) :: t(3, 3), t_hat(3, 3)
1081 real(kind = kreal) :: t_hat_tmp(3, 3)
1082 real(kind = kreal) :: e(3, 3), e_hat(3, 3)
1083 real(kind = kreal) :: e_hat_tmp(3, 3)
1084 real(kind = kreal) :: x1_hat, x2_hat, x3_hat
1085 real(kind = kreal) :: pi
1089 alp = 0.0d0; alp0 = 0.0d0
1090 tempc = 0.0d0; temp0 = 0.0d0
1094 pi = 4.0d0*datan( 1.0d0 )
1098 if(
present( tt ) .AND.
present( t0 ) )
then
1100 tempc = 0.5d0*( tt(1)+tt(2) )
1101 temp0 = 0.5d0*( t0(1)+t0(2) )
1107 if( ntemp .EQ. 1 )
then
1111 call fetch_tabledata( mc_isoelastic, gausses(1)%pMaterial%dict, outa1, ierr, ina1 )
1123 ee = gausses(1)%pMaterial%variables(m_youngs)
1124 pp = gausses(1)%pMaterial%variables(m_poisson)
1135 if( ntemp .EQ. 1 )
then
1139 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1141 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1149 if( ntemp .EQ. 1 )
then
1153 call fetch_tabledata( mc_themoexp, gausses(1)%pMaterial%dict, outa2(:), ierr, ina2 )
1155 if( ierr ) stop
"Fails in fetching expansion coefficient!"
1163 refv(1) = section(1)
1164 refv(2) = section(2)
1165 refv(3) = section(3)
1167 ec(1, 1) = ecoord(1, 1)
1168 ec(2, 1) = ecoord(2, 1)
1169 ec(3, 1) = ecoord(3, 1)
1170 ec(1, 2) = ecoord(1, 2)
1171 ec(2, 2) = ecoord(2, 2)
1172 ec(3, 2) = ecoord(3, 2)
1174 call framtr(refv, ec, le, trans)
1176 transt= transpose( trans )
1185 radius = gausses(1)%pMaterial%variables(m_beam_radius)
1187 angle(1) = gausses(1)%pMaterial%variables(m_beam_angle1)
1188 angle(2) = gausses(1)%pMaterial%variables(m_beam_angle2)
1189 angle(3) = gausses(1)%pMaterial%variables(m_beam_angle3)
1190 angle(4) = gausses(1)%pMaterial%variables(m_beam_angle4)
1191 angle(5) = gausses(1)%pMaterial%variables(m_beam_angle5)
1192 angle(6) = gausses(1)%pMaterial%variables(m_beam_angle6)
1200 angle(k) = angle(k)/180.0d0*pi
1202 x2_hat = radius*dcos( angle(k) )
1203 x3_hat = radius*dsin( angle(k) )
1212 edisp_hat(i, j) = trans(i, 1)*edisp(1, j) &
1213 +trans(i, 2)*edisp(2, j) &
1214 +trans(i, 3)*edisp(3, j)
1217 tdisp(jj) = edisp(i,j)
1228 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1231 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1232 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1233 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1234 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1235 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1236 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1237 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1238 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1239 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1241 if( ntemp .EQ. 1 )
then
1249 e_hat_tmp(1:3,:) = matmul( trans, e_hat(1:3,:) )
1250 t_hat_tmp(1:3,:) = matmul( trans, t_hat(1:3,:) )
1252 e(:, 1:3) = matmul( e_hat_tmp(:,1:3), transt )
1253 t(:, 1:3) = matmul( t_hat_tmp(:,1:3), transt )
1255 gausses(1)%strain(k) = e_hat(1, 1)
1256 gausses(1)%stress(k) = t_hat(1, 1)
1259 gausses(1)%strain_out(k) = gausses(1)%strain(k)
1260 gausses(1)%stress_out(k) = gausses(1)%stress(k)
1264 ndstrain(1, k) = 0.0d0
1265 ndstrain(2, k) = 0.0d0
1266 ndstrain(3, k) = 0.0d0
1267 ndstrain(4, k) = 0.0d0
1269 ndstress(1, k) = 0.0d0
1270 ndstress(2, k) = 0.0d0
1271 ndstress(3, k) = 0.0d0
1272 ndstress(4, k) = 0.0d0
1279 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1282 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1283 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1284 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1285 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1286 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1287 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1288 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1289 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1290 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1292 if( ntemp .EQ. 1 )
then
1300 e_hat_tmp(1:3, :) = matmul( trans, e_hat(1:3, :) )
1301 t_hat_tmp(1:3, :) = matmul( trans, t_hat(1:3, :) )
1303 e(:, 1:3) = matmul( e_hat_tmp(:, 1:3), transt )
1304 t(:, 1:3) = matmul( t_hat_tmp(:, 1:3), transt )
1306 ndstrain(1, k) = e_hat(1, 1)
1307 ndstress(1, k) = t_hat(1, 1)
1314 e_hat(1, 1) = ( edisp_hat(1, 2)-edisp_hat(1, 1) )/le
1317 t_hat(1, 1) = ee*( edisp_hat(1, 2)-edisp_hat(1, 1) )/le &
1318 -ee*x2_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(2, 1) &
1319 +( -4.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 3) &
1320 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(2, 2) &
1321 +( -2.0d0/le+6.0d0*x1_hat/l2 )*edisp_hat(3, 4) ) &
1322 -ee*x3_hat*( ( -6.0d0/l2+12.0d0*x1_hat/l3 )*edisp_hat(3, 1) &
1323 +( 4.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 3) &
1324 +( 6.0d0/l2-12.0d0*x1_hat/l3 )*edisp_hat(3, 2) &
1325 +( 2.0d0/le-6.0d0*x1_hat/l2 )*edisp_hat(2, 4) )
1327 if( ntemp .EQ. 1 )
then
1335 e_hat_tmp(1:3, :) = matmul( trans, e_hat(1:3, :) )
1336 t_hat_tmp(1:3, :) = matmul( trans, t_hat(1:3, :) )
1338 e(:, 1:3) = matmul( e_hat_tmp(:, 1:3), transt )
1339 t(:, 1:3) = matmul( t_hat_tmp(:, 1:3), transt )
1341 ndstrain(2, k) = e_hat(1, 1)
1342 ndstress(2, k) = t_hat(1, 1)
1352 (etype, nn, ecoord, gausses, section, stiffx, tt, t0, tdisp, rnqm )
1354 gausses(1)%nqm(1:12) = rnqm(1:12)
1375 ( gausses, estrain, estress, enqm )
1384 real(kind = kreal),
intent(out) :: estrain(6)
1385 real(kind = kreal),
intent(out) :: estress(6)
1386 real(kind = kreal),
intent(out) :: enqm(12)
1390 estrain(1:6) = gausses(1)%strain_out(1:6)
1391 estress(1:6) = gausses(1)%stress_out(1:6)
1392 enqm(1:12) = gausses(1)%nqm(1:12)
1398 (etype, nn, ecoord, u, du, gausses, section, qf, tt, t0)
1405 integer,
intent(in) :: etype
1406 integer,
intent(in) :: nn
1407 real(kind=kreal),
intent(in) :: ecoord(3, nn)
1408 real(kind=kreal),
intent(in) :: u(3, nn)
1409 real(kind=kreal),
intent(in) :: du(3, nn)
1411 real(kind=kreal),
intent(in) :: section(:)
1412 real(kind=kreal),
intent(out) :: qf(nn*3)
1413 real(kind=kreal),
intent(in),
optional :: tt(nn), t0(nn)
1416 real(kind = kreal) :: stiff(nn*3, nn*3), totaldisp(nn*3)
1417 integer(kind = kint) :: i
1419 call stf_beam_641(etype, nn, ecoord, gausses, section, stiff, tt, t0)
1423 totaldisp(3*i-2:3*i) = u(1:3,i) + du(1:3,i)
1426 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.
real(kind=kreal), pointer ref_temp
REFTEMP.
This module provide common functions of beam elements.
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 framtr(refx, xl, le, t)
subroutine updatest_beam(etype, nn, ecoord, u, du, section, gausses, QF)
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(etype, nn, ecoord, gausses, section, edisp, ndstrain, ndstress)
Calculate NODAL STRESS and STRAIN of 611 beam elements.
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(etype, nn, ecoord, section, E, P, STIFF)
Calculate stiff matrix of BEAM elements.
subroutine stf_beam_641(etype, nn, ecoord, gausses, section, stiff, tt, t0)
Calculate stiff matrix of BEAM elements.
subroutine nqm_beam(nn, ecoord, gausses, section, ul, rnqm)
Calculate elemental section force (N, Q, M) 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.