SPEED
SDOF_SHEAR_MODEL.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine sdof_shear_model (sid, ndof, gr_acc, direction)
 Computation for SDOF shear model.
 

Function/Subroutine Documentation

◆ sdof_shear_model()

subroutine sdof_shear_model ( integer*4  sid,
integer*4  ndof,
real*8  gr_acc,
integer*4  direction 
)

Computation for SDOF shear model.

Author
Aline Herlin
Date
November, 2020
Version
1.0
Parameters
[in]sIDoscillator ID
[in]gr_accbase acceleration
[in]directiondirection of motion

Definition at line 27 of file SDOF_SHEAR_MODEL.f90.

28
29 use speed_sci
30
31 implicit none
32
33 integer*4 :: sID, ndof, direction, Usign
34 integer*4 :: idof, i, j
35 real*8 :: gr_acc
36 real*8, dimension(ndof) :: e, de, s, syspeff0, syspeff
37
38 syspeff0 = 0
39
40 do idof=1,ndof
41 syspeff(idof) = gr_acc*sys(sid)%Ms(idof,idof) !!!mass x (-u_g'') = inertial force from the ground acceleration
42 enddo
43
44 if (ndof.gt.1) then
45 do idof=1,ndof-1
46 syspeff0(idof) = syspeff(idof) - sys(sid)%IntForce(idof,direction) + sys(sid)%IntForce(idof+1,direction) !!! SDOFItF = interaction force Ku(n)
47 enddo
48 endif
49 syspeff0(ndof) = syspeff(ndof) - sys(sid)%IntForce(ndof,direction)
50
51 ! returns sys(sID)%tempU = displacement at time n+1 = Relative displacement of structure w.r.t. ground
52 if (sys(sid)%StructType.eq.1) then
53 call central_difference(ndof, sys(sid)%Ms(1,1), sys(sid)%Ms_inv(1,1), sys(sid)%Cs, sys(sid)%dt, &
54 sys(sid)%tempU(1,direction), sys(sid)%tempU1(1,direction), &
55 sys(sid)%tempU0(1,direction), syspeff0, sys(sid)%flag_Minv )
56 else
57 call central_difference(ndof, sys(sid)%Ms(1:ndof,1:ndof), sys(sid)%Ms_inv(1:ndof,1:ndof), sys(sid)%SysC(1:ndof,1:ndof), &
58 sys(sid)%dt, sys(sid)%tempU(1:ndof,direction), sys(sid)%tempU1(1:ndof,direction), &
59 sys(sid)%tempU0(1:ndof,direction), syspeff0, sys(sid)%flag_Minv )
60 ! if (direction.eq.1) then
61 ! write(*,*) 'InputForces: Acc =', gr_acc, 'sysPeff = ', (sysPeff0(idof), idof = 1,sys(1)%NDOF)
62 ! write(*,*) 'Input Un-1 = ', (sys(1)%tempU0(idof,1), idof=1,sys(1)%NDOF), 'Un = ', (sys(1)%tempU1(idof,1), idof=1,sys(1)%NDOF)
63 ! write(*,*) 'Output Un+1 = ', (sys(1)%tempU(idof,1), idof=1,sys(1)%NDOF)
64 ! endif
65 endif
66
67 ! Modify this for SSI - with MDOF (below code works for SSI-SDOF)
68 if(sys(sid)%const_law.eq.3) then
69 if (sys(sid)%tempU(1, direction).ge.0.0) usign = 1
70 if (sys(sid)%tempU(1, direction).lt.0.0) usign = -1
71 if ((abs(sys(sid)%tempU(1, direction)).ge.sys(sid)%EU).or.(sys(sid)%damage(direction).eq.1)) &
72 sys(sid)%tempU(1,direction) = usign*sys(sid)%EU
73 endif
74
75 ! Time Variation of Interstory Drift (IDR)
76 sys(sid)%variIDR(1,direction) = sys(sid)%tempU(1,direction) - sys(sid)%IDR(1,direction)
77 sys(sid)%IDR(1,direction)=sys(sid)%tempU(1,direction);
78 if (sys(sid)%StructType.eq.2) then
79 do j=2,ndof
80 sys(sid)%variIDR(j,direction) = (sys(sid)%tempU(j,direction) - sys(sid)%tempU(j-1,direction)) - sys(sid)%IDR(j,direction)
81 sys(sid)%IDR(j,direction) = sys(sid)%tempU(j,direction) - sys(sid)%tempU(j-1,direction)
82 enddo
83 !Max IDR
84 do j=1,ndof
85 sys(sid)%MaxIDR(j,direction) = max(sys(sid)%MaxIDR(j,direction), abs(sys(sid)%IDR(j,direction)/sys(sid)%Floor_h))
86 enddo
87 endif
88
89 do idof= 1,ndof
90 !!! Relative acceleration
91 sys(sid)%tempRA1(idof,direction) = ( sys(sid)%tempU(idof,direction) + sys(sid)%tempU0(idof,direction) - &
92 2.d0*sys(sid)%tempU1(idof, direction))/sys(sid)%dt2
93 !!! Absolute acceleration AH
94 sys(sid)%tempA1(idof,direction) = sys(sid)%tempRA1(idof,direction) - gr_acc
95
96 ! Updating displacement Values
97 sys(sid)%tempU0(idof,direction)=sys(sid)%tempU1(idof,direction)
98 sys(sid)%tempU1(idof,direction)=sys(sid)%tempU(idof,direction)
99 sys(sid)%tempU(idof,direction)=0
100 enddo
101
102 do idof=1,ndof
103 e(idof) = sys(sid)%IDR(idof,direction) - sys(sid)%variIDR(idof,direction) ! IDR at (n)th time step
104 de(idof)= sys(sid)%variIDR(idof,direction) ! change in IDR at (n+1)th timestep
105 s(idof) = sys(sid)%IntForce(idof,direction) ! Shear Force at (n)th timestep
106
107 if (sys(sid)%StructType.eq.1) then
108 if (sys(sid)%const_law.eq.1) then
109 call linear_elastic(sys(sid)%Ks, s, de) !!! elastic constitutive law
110 elseif (sys(sid)%const_law.eq.2) then
111 call perfectly_plastic(sys(sid)%Ks, s, de, sys(sid)%FY) !!! elastoplastic constitutive law
112 elseif (sys(sid)%const_law.eq.3) then
113 call trilinear(sys(sid)%Ks, sys(sid)%Hs, sys(sid)%Ss, s, de, e, sys(sid)%FY, sys(sid)%FH, sys(sid)%FU, sys(sid)%EY, &
114 sys(sid)%EH, sys(sid)%EU, sys(sid)%branch(direction), sys(sid)%damage(direction)) !!! trilinear constitutive law
115 endif
116 elseif (sys(sid)%StructType.eq.2) then
117
118 if (sys(sid)%const_law.eq.1) then
119 call linear_elastic(sys(sid)%props(idof,1,1), s(idof), de(idof))
120 elseif (sys(sid)%const_law.eq.2) then
121 if ((abs(sys(sid)%IDR(idof,direction))/sys(sid)%Floor_h).GT.sys(sid)%dval(idof,4)) then
122 sys(sid)%MDOFIDeath(idof,direction) = 1
123 endif
124 call ksteel02(sys(sid)%props(idof,1:10,1), s(idof), e(idof), de(idof), sys(sid)%MDOFEt(idof,direction), &
125 sys(sid)%MDOFstatev(idof,1:11,direction), sys(sid)%MDOFspd(idof,direction), &
126 sys(sid)%MDOFyield(idof,direction), sys(sid)%MDOFIDeath(idof,direction) ) !sys(sID)%Ms(1:ndof,1:ndof), ndof
127 endif
128 endif
129
130 sys(sid)%IntForce(idof,direction) = s(idof)
131
132 enddo
133
134 return
subroutine linear_elastic(e0, s, de)
Defines stress-strain relation for LE SDOF oscillator.
subroutine perfectly_plastic(e0, s, de, fy)
Defines stress-strain relation for EPP SDOF oscillator.
subroutine central_difference(ndof, m, m_inv, c, dt, u, u1, u0, p, flag_minv)
Computes the displacement of the oscillator through central difference scheme.
subroutine ksteel02(props, s, e, de, et, statev, spd, yield, ideath)
subroutine trilinear(k, h, s, f, de, e, fy, fh, fu, ey, eh, eu, branch, damage)
Defines stress-strain relation for TRILINEAR SDOF oscillator.
Definition TRILINEAR.f90:29
Contains parameters for MDOF.
Definition MODULES.f90:725
type(system), dimension(:), allocatable sys
SDOF system.
Definition MODULES.f90:771

References central_difference(), ksteel02(), linear_elastic(), perfectly_plastic(), speed_sci::sys, and trilinear().

Here is the call graph for this function: