SPEED
SDOF_SHEAR_MODEL.f90
Go to the documentation of this file.
1! Copyright (C) 2012 The SPEED FOUNDATION
2! Author: Ilario Mazzieri
3!
4! This file is part of SPEED.
5!
6! SPEED is free software; you can redistribute it and/or modify it
7! under the terms of the GNU Affero General Public License as
8! published by the Free Software Foundation, either version 3 of the
9! License, or (at your option) any later version.
10!
11! SPEED is distributed in the hope that it will be useful, but
12! WITHOUT ANY WARRANTY; without even the implied warranty of
13! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14! Affero General Public License for more details.
15!
16! You should have received a copy of the GNU Affero General Public License
17! along with SPEED. If not, see <http://www.gnu.org/licenses/>.
18
26
27subroutine sdof_shear_model (sID, ndof, gr_acc, direction)
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
135end subroutine sdof_shear_model
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 sdof_shear_model(sid, ndof, gr_acc, direction)
Computation for SDOF shear model.
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