ACES PSC Module: Equations File (Last modified: 30/08/12)
This file contains a list of all equations used by the analysis routine.
When performing an analysis calculations are performed in the strict
order specified within this file. New parameters can be defined and
incorporated into the this Equations file but they must first be defined
in the Parameters List file.
EDITING INSTRUCTIONS
The rules for editing this file and creating and defining equations are
given below.
GENERAL RULES
Since this module mimics a "spreadsheet" equations must be inserted
into the list in the strict order in which you require them to be
executed when performing a design. Consequently they must conform
to the following rules:
(1) Variables must first be defined in the Parameters List file.
(2) Blank lines may be used anywhere to delineate equation blocks.
(3) Comment lines must be prefaced with the exclamation symbol (!)
(4) Each equation may be up to 120 characters long.
(5) Allowable operands are ‘+’, ‘-‘, ‘*’, ‘/’ and ‘^’ (exponential)
(6) Variables must appear in equations without curly braces.
(7) Undefined variables will be allocated the value ‘1’.
(8) Any number of bracket groups may be used in an equation.
(9) Nested brackets are NOT permitted.
(10) Spaces in the equation will be ignored.
(11) Constants may be specified as decimal, integer or exponential
(12) String (text) variables must contain the '$' symbol (e.g. Note$)
(13) String variables can only be assigned a maximum of 44 characters
(14) Comments on an IF statement line must not include the ( ) symbols
(15) Only equations that lie within the **** boundaries will be used
________________________________________________________________________
DISPLAYING EQUATIONS in the CALCULATION LOG
. Equations have been listed sequentially in the equation list to
follow the logical order in which the design is usually performed.
Blocks of equations therefore correspond to each tab in the
module. The tabs have been internally numbered 1-9 and the
first block of equations in any tab is also given that same
number e.g. !4 PRESTRESS LOSSES TAB
. When the button at the bottom of a tab is clicked
ACES will display the calculation log of all equations associated
with that tab.
. Sub-groups of equations represent various frames and calculation
buttons within a given tab. They have been given a label and,
where applicable, a letter designating that sub-group e.g.,
!7b SHEAR DESIGN - Flexure shear cracking
. Only the equations relating to this block will be displayed in the
calculation log when the 'View calcs' button on that dialog box
(or in that frame) is clicked.
. When the button at the bottom of a tab is clicked
ACES will display the full calculation log i.e., all equations
associated with the entire analysis.
. A block or sub-block is ended when another tab group number or
sub-group number is encountered.
. !0 signifies that the equations in that block are not to be
associated with any button.
. !+ signifies that all equations in that block will always be
displayed in the log.
. !- signifies that equations in that block will not be displayed
in the log for subgroups.
________________________________________________________________________
GENERAL FUNCTIONS
. The MAX and MIN functions
The MAXimising and MINimising functions operate on variables
and numbers only - no expressions are allowed. Variables and
numbers may be signed (e.g. -ve) and up to 20 values only are
allowed within the brackets. Note that the ABS and TAN
functions CANNOT be included in a MAX/MIN list.
. TAN (tangent) function. This takes the form:
var = TAN (Angle)
'Angle' must be specified in radians. If it is not already in radians
then convert it using one of the nine temporary work variables
(WorkVarX) described in the Parameters List file and the two
expressions:
WorkVarX = (Angle*3.14159/180.)
var = TAN (WorkVarX)
Note that the ABS and TAN functions CANNOT be included together
on the same line nor in a MAX/MIN list. In such cases a
temporary parameter (WorkVarX) must be used to calculate an
intermediate value.
. ABS (absolute value) function. This takes the form:
var = ABS (xxx)
where 'var' is any parameter in the parameter list and 'xxx' is either
an optionally signed variable or a number. It MUST be included
within normal brackets (as shown). Note that the ABS and TAN
functions CANNOT be included together on the same line nor in a
MAX/MIN list. In such cases a temporary parameter (WorkVarX)
must be used to calculate an intermediate value. Note also that in
a statement such as var = -ABS (xxx) var will always be negative.
. OUTPUT function
The function is specified as: OUTPUT a, b, c, d, .... etc where a,
b, c, etc are parameters that have already been defined and used
in the equation list. ACES will simply display the specified values,
separated by commas. This can be very useful in LOOP and
ITERATE functions to track the behaviour of one or more variables.
A maximum of 20 parameters can be listed in OUTPUT ......
Note that the display of values will occur even if the NOTRACK
flag has been invoked (refer to the LOOP function below for a
description of the NOTRACK flag).
. IF function. There are two types of IF function:
(1) Single line form: The function can be expressed either as:
IF (xxx > yyy) expression
or as:
IF (xxx > yyy) THEN expression
(2) Multiple line form. This must be expressed as:
IF (xxx > yyy) THEN
expressions1
ELSE
expressions2
END IF
Both expressions1 and expressions2 may contain up to 20
statements (or none at all) and the operands can only be:
">", "<" or "=". Values 'xxx' and 'yyy' can only be variables
or numbers and must be included within normal brackets.
Comments on an IF statement line must not include embedded
quotation ( ) symbols.
NOTE that only the Single line form can be used within a loop
. LOOP function. This takes the form:
LOOP i = a, b NOTRACK
expression 1
function 2
...... etc ......
END LOOP
NOTRACK is an optional attribute - it suppresses the tracking and
display of intermediate results during the looping process.
If any parameter name within 'expression' contains the character 'i'
then the 'i' itself will be replaced with the number corresponding
to the loop variable 'i'.
For example, in the calculation of tension forces in PS strands the
general equation for setting the bar depth (Dpbari) of bars in row
'i' is: “Dpbari = D – Ybarri”. Using the LOOP function, this can
be performed for bar rows 1 to 8 using three lines of code viz:
LOOP i = 1,8
Dpbarri = D - Ybarri
END LOOP
Internally ACES will create 8 equations of the form:
Dpbarr1 = D - Ybarr1, Dpbarr2 = D - Ybarr2, etc.
A maximum of 20 expressions and/or functions can be included in
the loop and the loop variables 'a' and 'b' can only lie betweeb 0
and 20
NOTE that only the Single line form of IF can be used within a loop
. ITERATE funtion. This must take the form:
ITERATE
.........
END ITERATE
or
ITERATE ON param IN STEPS OF xx NOTRACK
...... (up to twenty statements allowed) .....
END ITERATION WHEN (param ><= number) OR AFTER n CYCLES
where: 'param' = any parameter in the parameter list
'xx' = the number to be added to 'param' at the
beginning of each cycle. This may be zero
if the iteration is naturally convergent.
' n' = maximum number of cycles to perform if the
iteration is not converging quickly enough.
The quantity evaluated, (param ><= number) must be enclosed in
normal brackets. Note that the tolerance for equality has been
set to 1%. That is, if two numbers are within 1% of each other,
they are considered equal. 'number' may be a parameter or a
number.
NOTRACK is optional and suppresses the tracking and display of
intermediate results during the iteration process.
Example:
ITERATE ON WorkVar1 IN STEPS OF 5
WorkVar2 = WorkVar1 * 2.
END ITERATION WHEN (WorkVar1 = 25) OR AFTER 30 CYCLES
For notes (TnoteXX) involving the Torsion equations, prepending
the string with a ? will display the note in red, prepending
with ^ will display in green.
________________________________________________________________________
SPECIAL FUNCTIONS
. SORT functions:
SORT_LOW_HIGH (p1i,p2i,r1i,r2i) NOTRACK
SORT_HIGH_LOW (p1i,p2i,r1i,r2i) NOTRACK
These two functions sort a set of 8 values 'p1i' in ascending and/or
descending order respectively and place the sorted results into the
set labelled 'r1i'. Values in set 'p2i' correspond to those in set
'p1i' and are placed into 'r2i' during the sort process. In effect
the function sorts the set 'p1i' and its corresponding values 'p2i'
and stores the results into 'r1i' and 'r2i'. Note, however, that
'p1i' and 'p2i' must contain 8 values each.
NOTRACK suppresses the tracking and display of sorted output.
The functions have been set up specifically for sorting strand and
passive reinforcement bars and their corresponding forces in order
to determine if they lie in the tension zone of the section.
Example: SORT_LOW_HIGH (Ybarri, Fbari, Dsorti, Fsorti)
. COMBINE and SORT functions:
COMBINE_SORT_LOW_HIGH (p1i, p2i, p3i, p4i, r1i, r2i, r3i)
COMBINE_SORT_HIGH_LOW (p1i, p2i, p3i, p4i, r1i, r2i, r3i)
This is similar to the SORT function described above with the
exception that the 'p1i' and 'p3i' data sets and their corresponding
'p2i' and 'p4i' sets are first combined before sorting. The 8 values
in each of the individual 'p1i' and 'p3i' sets then appear as 16
sorted values in the final 'r1i' set.
This function is used to combine the strand table ('p1i'/'p3i') and
the passive reinforcement tables into one consolidated table which
is then sorted by bar distance ('r1i') and the corresponding bar
forces ('r2i').
The values in 'r3i' are flags that indicate which set the 'r1i' values
originally came from (either 'p1i' or 'p3i'). A value of 1 indicates
'p1i' and 2 indicates 'p3i'. This information is required by the
strain compatibility routine to differentiate a PS strand from a
reinforcing bar when calculating the yield strain.
Example:
COMBINE_SORT_HIGH_LOW (Dbari,Fbari,Dpfi,Fbfi,Dsti,Fsti,Typei)
. LOCATE Ultimate Neutral Axis Depth (dn) Functions:
LOCATE_DN_USING_SIMPLIFIED
and
LOCATE_DN_USING_STRAIN_COMPATIBILITY
Both functions use the values returned by the COMBINE_SORT
functions. They locate the neutral axis depth (Dcb) and populate
the bar force table automatically. Although these functions could
have been replaced by inserting relevant equations directly into the
equations file it has been found that the hard-coded routines
implemented here-in execute much faster.
The '_SIMPLIFIED' method assumes: (1) a concrete stress block of
0.85f'c; and (2) that all bars and strands have yielded (except
those in the compression zone, which are excluded from the analysis).
The '_STRAIN _COMPATIBILITY' method derives the concrete
ultimate strain from the parameter 'ucu' which is editable on the
'Ult M Check' tab but which defaults to 0.003. The function
incrementally adjusts the depth Dcb until the concrete force
balances the steel forces. Bars and strands in the compression
zone are excluded and the bar/strand forces are reduced if the
bar/strand strain is below yield. (This is commonly refered to as
'Partial Prestressing').
***************************** Start of Equations *****************************
!- CALCULATION OF DEFAULT VALUES
IF (f`cg = 0.) THEN f`cg = 50.
IF (Eg = 0.) THEN Eg = 0.043 * (2500.^1.5) * (f`cg^0.5)
IF (f`cs = 0.) THEN f`cs = 40.
IF (Es = 0.) THEN Es = 0.043 * (2400.^1.5) * (f`cs^0.5)
IF (f`cmi = 0.) THEN f`cmi = 40.
IF (Egmi = 0.) THEN Egmi = 0.043 * (2500.^1.5) * (f`cmi^0.5)
IF (f`cmt = 0.) THEN f`cmt = 30.
IF (u5 = 0.) THEN u5 = us
IF (u6 = 0.) THEN u6 = u1
IF (fcrack = 0.) THEN fcrack = 200.
IF (Egmt = 0.) THEN
WorkVar1 = 0.8 * f`cg
Egmt = 0.043 * (2500.^1.5) * (WorkVar1^0.5)
END IF
IF (Esr = 0.) THEN Esr = Ep
IF (ø = 0.) THEN ø = 0.9
IF (O = 0.) THEN O = 0.9
IF (øm= 0.) THEN øm= 0.9
IF (Om= 0.) THEN Om= 0.9
IF (ucu = 0.) THEN ucu = 0.003
!2 SECTION PROPERTIES TAB - Section property calculations
Zt = Ig / (Dg - Yb)
Zb = Ig / Yb
IF (Ws = 0.) THEN Ws = Wtf
IF (bef = 0.) THEN bef = Ws
IF (Es = 0.) THEN Es = n*Eg
n = Es/Eg
Bw2 = 2*bw
bv = Bw2
IF (CalcProp = 1) THEN
CalcPrp$ = Composite section props recalculated by ACES
D = Dg + Ts
As = Ws * Ts
Ys = Dg + Ts/2.
Ac = Ag + As*n
Yc = (Ag * Yb + As*n*Ys) / (Ag + As*n)
WorkVar1 = Yc - Yb
WorkVar2 = Ys - Yc
Ic = Ig + Ag*WorkVar1^2 + n*Ws*Ts^3/12. + n*As*WorkVar2^2
WorkVar1 = D - Yc
Zst = Ic / (WorkVar1*n)
WorkVar1 = Dg - Yc
Zsb = Ic / (WorkVar1*n)
Zgt = Ic / (WorkVar1)
Zgb = Ic / Yc
ELSE
CalcPrp$ = Composite props NOT recalculated by ACES
END IF
! Calculation of shear flow at centroid and web/flange
IF (CalcProp = 1) THEN
Ybflan = (Yc - Ybf) ! Bottom flange to composite centroid
WorkVar1 = (Yc - Dwf) ! Height of web block
Areac = Abf + WorkVar1 * Bw2 ! Shear area below composite centroid
Ymomsc = Abf * Ybflan + WorkVar1 * Bw2* WorkVar1 / 2. ! MOI below composite centroid
Ybarc = Ymomsc / Areac ! Centroidal offset of section below centroid
Qna = Areac * Ybarc ! Shear flow at centroid
! Calculations for Web/flange joint
Hwebfl = Dwf - Tbf ! Height of web block
Ywebfl = Yc - Tbf - Hwebfl / 2. ! Centroidal offset of web block
Areac = Abf + Hwebfl*Bw2 ! Area of bottom flange + web block
Ymomsc = Abf*Ybflan + Hwebfl*Bw2*Ywebfl ! Moment of area of section below centroid
Ybarc = Ymomsc / Areac ! Centroidal offset of section below centroid
Qfw = Areac * (Yc-Dwf) ! Shear flow at web/flange interface
END IF
IF (Qna < 0.) THEN Qna = -Qna
IF (Qfw < 0.) THEN Qfw = -Qfw
!2a SECTION PROPERTIES TAB - Non-prestressed reinforcement
Nrfbarst = 0
Arft = 0
Ynbarsrf = 0
LOOP i = 1,20
Nrfbarst = Nrfbarst + Nrfbrsi
END LOOP
LOOP i = 1,20
WorkVar1 = 3.14159 * BarDtri * BarDtri / 4
Arfi = WorkVar1 * Nrfbrsi
END LOOP
LOOP i = 1,20
Arft = Arft + Arfi
END LOOP
Arl = Arft ! Total area of passive reinforcement
LOOP i = 1,20
YbxNrfi = Yrfi * Arfi
END LOOP
LOOP i = 1,20
Ynbarsrf = Ynbarsrf + YbxNrfi
END LOOP
!3a PS ESTIMATES TAB - Differential Shrinkage
u = u2 - u1
n = Es/Eg
ec = Ys-Yc
Fshr = u*Es*As*1E-9*(1 - 2.71828^-Rcf)/Rcf ! Calculation of shrinkage force
Mshr = Fshr*ec/1000
SumNA = n*As + Ag
Fsus = Fshr*1000*(1/As - n/SumNA)
Fsug = -Fshr*1000/SumNA
fts = Fsus - Mshr*1E6/Zst
fbs = Fsus - Mshr*1E6/Zsb
ftg = Fsug - Mshr*1E6/Zgt
fbg = Fsug + Mshr*1E6/Zgb
!3b PS ESTIMATES TAB - Prestress Forces
! Previous option to included debonded bars has been removed
Nbarb1 = Nbart1 - Nbard1
Nbarb2 = Nbart2 - Nbard2
Nbarb3 = Nbart3 - Nbard3
Nbarb4 = Nbart4 - Nbard4
Nbarb5 = Nbart5 - Nbard5
Nbarb6 = Nbart6 - Nbard6
Nbarb7 = Nbart7 - Nbard7
Nbarb8 = Nbart8 - Nbard8
IncDBar$ = Debonded bars are NOT included in analysis
YbxNb1 = Ybarr1 * Nbarb1
YbxNb2 = Ybarr2 * Nbarb2
YbxNb3 = Ybarr3 * Nbarb3
YbxNb4 = Ybarr4 * Nbarb4
YbxNb5 = Ybarr5 * Nbarb5
YbxNb6 = Ybarr6 * Nbarb6
YbxNb7 = Ybarr7 * Nbarb7
YbxNb8 = Ybarr8 * Nbarb8
! Find total number of bars in layers 1 to 8 (Nbart1 to Nbart8)
Nbars = 0
LOOP i = 1,8
Nbars = Nbars + Nbarti
END LOOP
! Find total number of debonded bars in layers 1 to 8
Ndbars = 0
LOOP i = 1,8
Ndbars= Ndbars+ Nbardi
END LOOP
IF (Nbars = 0) THEN
Ntubbars = 0.
ELSE
Ntubbars = 100. * Ndbars / Nbars
END IF
! Find total number of bars used in the analysis (may/may not include debonded bars)
Nbbars = 0
LOOP i = 1,8
Nbbars= Nbbars+ Nbarbi
END LOOP
! Find total moment of area of bars in each layer
Ynbars = 0
LOOP i = 1,8
Ynbars= Ynbars+ YbxNbi
END LOOP
! Calculate Pj & Centroid of bar group & Eccentricity of group
Pj = Nbbars*Pult*Jf
Ycgs = Ynbars / Nbbars
e = Yb - Ycgs
!4 PRESTRESS LOSSES TAB - Steam Relaxation Losses
k5a = 1 + (Jf-0.7)*0.5/0.1
k5b = (Jf-0.4)/0.3
WorkVar3 = 0.
k5 = MAX (k5a,k5b,WorkVar3)
Lsrl = 0.1*k5/1.5
Lsr = 100*Lsrl
Prl = -Lsrl*Pj
Pjr = Pj + Prl
! PRESTRESS LOSSES TAB - Elastic Deformation Losses
Ap = Nbbars * Aps
Apt= Ap
fcgs = -Pjr*1000*(1/Ag + e*e/Ig) + Msw*1E6*e/Ig
Pelastic = fcgs*Ep*Ap/(Egmt*1000)
Ledl = -Pelastic*100/Pj
Pt = Pjr + Pelastic
Ltr = Pt*100/Pj
! PRESTRESS LOSSES TAB - Shrinkage Losses
Ac= n*As + Ag
Pshr = -us*Ep*Ap*1E-9/(1 + 15*Arl/Ac)
Lshr = -Pshr*100/Pj
Prs = Pt + Pshr
! PRESTRESS LOSSES TAB - Creep loss parameters
At = Ag + Ws * Ts
th = 2*At/(Gp + 0.5*Vp)
Fratio = f`cmt/f`cg
!4e PRESTRESS LOSSES TAB - Creep losses due to PS + SW
øcc = øccb*k2*k3
Occ = øcc ! HTML Reports cannot handle ø symbol
Occb = øccb ! HTML Reports cannot handle ø symbol
O = ø ! HTML Reports cannot handle ø symbol
fcscgs = -Pt*1000/Ag - Pt*1000*e*e/Ig + Msw*1E6*e/Ig
ucc1 = 1.E6*fcscgs*øcc/(Eg)
!4f PRESTRESS LOSSES TAB - Creep losses due to Deck + SDL
Fdeck = Mslab*1E6*(Yb-Ycgs)/Ig
Fsdl = Msdl * 1E6*(Yc-Ycgs)/Ic
øcc2 = øccb * k2s*k3s
Occ2 = øcc2 ! HTML Reports cannot handle ø symbol
ucc2 = øcc2*1E6*(Fdeck+Fsdl)/Eg
! PRESTRESS LOSSES TAB - Total creep losses
ucc = ucc1 + ucc2
Pcreep = ucc*Ep*Ap/1E9
Lcr = -Pcreep*100/Pj
P = Pt+Pshr+Pcreep
Ltt = P*100/Pj
!5 SERVICEABILITY CHECK - Girder stresses at transfer (Tension +ve Compression -ve)
f`csat = 0.5*f`cmt^0.5
f`csac = 0.6*f`cmt
f`at = 0.25*f`cg^0.5
f`ac = 0.4*f`cg
f`atsv = 0.5*f`cg^0.5
f`acsv = 0.6*f`cg
Mpte = -Pt*e/1000
fgt1 = -Pt*1000/Ag
fgb1 = fgt1
fgt2 = -Mpte*1E6/Zt
fgb2 = Mpte*1E6/Zb
fgt3 = -Msw *1E6/Zt
fgb3 = Msw*1E6/Zb
fgt4 = fgt1+fgt2+fgt3
fgb4 = fgb1+fgb2+fgb3
!5b SERVICEABILITY CHECK - Design moment stresses (Tension +ve; Compressn -ve)
Mpe = -P*e/1000
fgtss1 = -P*1000/Ag
fgbss1 = fgtss1
fgtss2 = -Mpe*1E6/Zt
fgbss2 = Mpe*1E6/Zb
fgtss3 = -Msw*1E6/Zt
fgbss3 = Msw*1E6/Zb
fgtss4 = -Mslab*1E6/Zt
fgbss4 = Mslab*1E6/Zb
fstss5 = -Msdl*1E6*SDLf/Zst
fsbss5 = -Msdl*1E6*SDLf/Zsb
fgtss5 = -Msdl*1E6*SDLf/Zgt
fgbss5 = Msdl*1E6*SDLf/Zgb
fstss6 = fts
fsbss6 = fbs
fgtss6 = ftg
fgbss6 = fbg
fstss7 = -Mll*1E6/Zst
fsbss7 = -Mll*1E6/Zsb
fgtss7 = -Mll*1E6/Zgt
fgbss7 = Mll*1E6/Zgb
fstss8 = -Mhvl*1E6/Zst
fsbss8 = -Mhvl*1E6/Zsb
fgtss8 = -Mhvl*1E6/Zgt
fgbss8 = Mhvl*1E6/Zgb
! SERVICEABILITY CHECK - Final design DL+SDL+LL stresses
fstll = fstss5+fstss6+fstss7+ftempst
fsbll = fsbss5+fsbss6+fsbss7+ftempsb
fgtll = fgtss1+fgtss2+fgtss3+fgtss4+fgtss5+fgtss6+fgtss7+ftempgt
fgbll = fgbss1+fgbss2+fgbss3+fgbss4+fgbss5+fgbss6+fgbss7+ftempgb
! SERVICEABILITY CHECK - Final design DL+SDL+HLV stresses
fstsv = fstss5+fstss6+fstss8+ftempst
fsbsv = fsbss5+fsbss6+fsbss8+ftempsb
fgtsv = fgtss1+fgtss2+fgtss3+fgtss4+fgtss5+fgtss6+fgtss8+ftempgt
fgbsv = fgbss1+fgbss2+fgbss3+fgbss4+fgbss5+fgbss6+fgbss8+ftempgb
! SERVICEABILITY CHECK - Determine maximum values
Msdlf = Msdl*SDLf
fmaxsllt = MAX (fstll,fsbll,fgtll,fgbll)
IF (fmaxsllt < 0.) THEN fmaxsllt = 0.
fmaxsllc = MIN (fstll,fsbll,fgtll,fgbll)
IF (fmaxsllc > 0.) THEN fmaxsllc = 0.
fmaxssvt = MAX (fstsv,fsbsv,fgtsv,fgbsv)
IF (fmaxssvt < 0.) THEN fmaxssvt = 0.
fmaxssvc = MIN (fstsv,fsbsv,fgtsv,fgbsv)
IF (fmaxssvc > 0.) THEN fmaxssvc = 0.
!5c SERVICEABILITY CHECK - Cracking Check
! Perform the SLS check using the linear-elastic strain compatibility method
!
! Four conditions are analysed:
!
! - cracking of PC girder only
! - PC girder under self weight + slab
! - cracking of composite girder (incl selfwt+slab strains in PC girder)
! - composite girder serviceability design moment (incl strains from non-comp PC girder)
!
! This module creates the following parameters
!
! curvco , Composite girder curvature
! curvpc , Precast curvature
! fcocrps , Composite cracking strand stress
! fcocrreo, Composite cracking reinf. stress
! fcodlps , Composite moment strand stress
! fcodlreo, Composite moment reinf. stress
! fcoincps, Composite strand stress increment
! fcoincre, Composite reinf. stress increment
! fpccrps , Precast cracking strand stress
! fpccrreo, Precast cracking reinf. stress
! fpcdlps , Precast strand stress
! fpcdlreo, Precast reinf. stress
! fpcincps, Precast strand stress increment
! fpcincrf, Precast reinf. stress increment
! Mcocrack, Composite cracking (decompression) moment
! Mcodesig, Composite moment
! Mcoincr , Composite moment increment,
! Mpccrack, Precast cracking (decompression) moment
! Mpcdlsla, Precast moment - SW + deck
! Mpcincr , Precast moment increment
! ucocrbot, Composite cracking strain at bottom
! ucocrtop, Composite cracking strain at top
! ucodlbot, Composite strain at bottom
! ucodltop, Composite strain at top
! uconeutr, Composite neutral axis depth
! upccrbot, Precast cracking strain at bottom
! upccrtop, Precast cracking strain at top
! upcdlbot, Precast strain at bottom
! upcdltop, Precast strain at top
! upcneutr, Precast neutral axis depth
!
! Call the routine that performs the SLS analysis using strain compatibility
ANALYSE_SLS_BY_LINEAR_ELASTIC_STRAIN
fslscrck = MAX (fcoincps,fcoincre) ! Determine max stress increment
IF (fslscrck > fcrack) THEN
CrkNote$ = Crack limit exceeded (fslscrck > fcrack)
ELSE
CrkNote$ = Crack check OK (fslscrck < fcrack)
END IF
IF (Mcodesig > Mcocrack) THEN
MslNote$ = SLS design moment exceeds capacity
ELSE
MslNote$ = SLS moment capacity OK
END IF
IF (SLScase = 0) THEN
SLScase$ = SLS Crack Check for Live Load
ELSE
SLScase$ = SLS Crack Check for Special Vehicle Load
END IF
!6b ULTIMATE MOMENT CHECK - Input data & constants
Dp = D - Ycgs
fp = 1000.*Pult/Aps
! Set parameters to generate stress-strain curve for strain compatibility
IF (fpus = 0.) fpus = 1750.
IF (epus = 0.) epus = 0.035
IF (epyf = 0.) epyf = 0.85
IF (epy = 0.) epy = epyf*fpus/Ep
fpy = Ep*epy
epe = P/(Nbbars*Aps*Ep)
WorkVar1 = Ap * fp
WorkVar2 = (Ast-Asc) * fsy
k2u = (WorkVar1 + WorkVar2) / (Ws*Dp*f`cs)
v = Srf - 0.007 * (f`cs-28)
fpu = fp * (1-k1u*k2u/v)
fuc = Srf * f`cs
! Tension forces in steel
LOOP i = 1,8 ! Strand depths
Dpbari = D - Ybarri
END LOOP
LOOP i = 1,20 ! Passive reinforcement depths
Dprfi = D - Yrfi
END LOOP
LOOP i = 1,8 ! Strand areas
Apbari = Nbarbi * Aps
END LOOP
! Passive reinforcement areas (Arfi) are already calculated
LOOP i = 1,8 NOTRACK ! Forces in strand (for simplified method)
Fbari = Apbari * fpu/1000.
IF (Fbari = 0.) THEN Dpbari = 0.
END LOOP
LOOP i = 1,20 NOTRACK ! Forces in passive R/F (for simplified method)
Fbrfi = Arfi * fsy / 1000.
IF (Fbrfi = 0.) THEN Dprfi = 0.
END LOOP
! LOCATE POSITION of NA (dn) & STEEL/CONCRETE CAPACITIES
!
! Combine and sort prestressed and non-prestressed R/F
! in descending order of distance from top fibre
COMBINE_SORT_HIGH_LOW (Dpbari,Fbari,Dprfi,Fbrfi,Dsorti,Fsorti,Typei) NOTRACK
! Calculate depth to neutral axis (dn) & steel/concrete capacities.
! Use values stored in Dsorti and Fsorti and base capacity
! calculations on the type of method selected (see below).
!
! SIMPLIFIED METHOD - Assumptions
!
! 1. The ultimate concrete stress state is assumed to be
! rectangular down to a distance of: gamma*neutral axis depth
! (viz gammaDn = v*dn where v = gamma and dn = depth to NA)
!
! 2. The ultimate concrete compressive stress Fuc = 0.85F’c
!
! 3. All steel (including passive reinforcement) below the neutral
! axis is at yield. Steel in compression is ignored.
!
! 4. The ultimate condition occurs when the compressive force in
! the concrete balances the tensile forces in the steel.
!
!
! STRAIN-COMPATIBILITY METHOD - Assumptions
!
! 1. The ultimate concrete stress state is assumed to be
! rectangular down to the depth of the equivalent concrete
! compression block (gamma * Dcb). Dcb is increased in increments
! of 0.1mm from an initial value of 0.1mm.
!
! 2. The ultimate concrete strain at the top surface is given by
! 'ucu' (usually 0.003 microstrain). The strain at each steel level
! is determined by linear interpolation of a straight line running
! from 'ucu' and through the neutral axis. The strain in the compression
! reinforcement is limited to the maximum allowed for the concrete.
!
! 3. If the interpolated strain exceeds the rupture strain the strand is
! assumed to be ruptured. If the interpolated strain exceeds the yield
! strain for its particular grade of steel, the full yield force for
! that bar is included.
!
! 4. If the interpolated strain is less that the yield strain, the
! elastic force at that strain is used.
!
! 5. The total concrete force may include contributions from the slab,
! flanges and web depending on the location of gamma*dn. Ultimate
! strand stresses are based on the stress-strain interaction diagram.
!
! 6. The ultimate condition occurs when the compressive force in
! the concrete balances the tensile forces in the steel. If not,
! increase the value of Dcb and iterate.
!
! 7. For legacy reasons, two parameters are used to represent the
! neutral axis depth - Dcb and dn.
!
! 8. Note that the concrete forces (Fultcs, Fultcf, Fultcw) and their
! correpsonding moments (Multcs, Multcf, Multcw) are calculated
! within the LOCATE_DN_.... functions, as is the value of 'gammaDn'.
IF (CalcDcb = 0) THEN
DcbNote$ = Based on simplified method
CalcDcb$ = dn calculated using simplified method
LOCATE_DN_USING_SIMPLIFIED_METHOD
ELSE
DcbNote$ = Based on strain compatibility method
CalcDcb$ = dn calc'd using strain compatibility method
LOCATE_DN_USING_STRAIN_COMPATIBILITY
END IF
WorkVar1 = Ts + Ttf
DnNote$ = NA in slab
IF (dn > Ts) THEN DnNote$ = Na in flange
IF (dn > WorkVar1) THEN DnNote$ = NA in Web
IF (CalcDcb = 0) THEN DnNote$ = Simplified method assumes dn in slab
! Calculate area of passive reinforcement in tension zone
Ast = 0.
LOOP i = 1,20
WorkVar1 = Arfi
IF (Dprfi > Dcb) Ast = Ast + WorkVar1
END LOOP
Ftstrand = 0.
LOOP i = 1,8
IF (Fbari = 0.) Yelds$i =
IF (Ybarri > Yc) Ftstrand = Ftstrand + Fbari
END LOOP
LOOP i = 1,8
ubari = 0.
IF (Apbari > 0.) ubari = 1E9 * Fbari / (Ep*Apbari)
END LOOP
LOOP i = 1,20
IF (Fbrfi = 0.) Yeldr$i =
END LOOP
LOOP i = 1,20
ubrfi = 0.
IF (Arfi > 0.) ubrfi = 1E9 * Fbrfi / (Esr*Arfi)
END LOOP
! Calculate area of non-P/S steel in compression
Asc = Arft - Ast
Dcbnok = Dcb
Dcbnok1 = Dcb
Dcbnok2 = Dcb
! Sum strand and R/F forces in WorkVar1 and Moment in WorkVar2
Fsteel = 0.
Msteel = 0.
LOOP i = 1,8 NOTRACK
Fsteel = Fsteel + Fbari
Msteel = Msteel + Mbari
END LOOP
LOOP i = 1,20 NOTRACK
Fsteel = Fsteel + Fbrfi
Msteel = Msteel + Mbrfi
END LOOP
! Calculate Ku
IF (Fsteel = 0) THEN
Ku = 0.
WorkVar3 = 0.
ELSE
WorkVar3 = 1000.*Msteel/Fsteel
END IF
IF (WorkVar3 = 0) THEN
Ku = 0
ELSE
Ku = dn/WorkVar3
END IF
IF (Ku > 0.4) THEN
KuNote$ = ? Section is over-reinforced (Ku > 0.4)
ELSE
KuNote$ = ^ Passive reinforcement OK (Ku < 0.4)
END IF
!6c ULTIMATE MOMENT CHECK - Final Ultimate Design Moments
Musw = Msw * LFsw
Muslab = Mslab * LFslab
Musdl = Msdl * LFsdl
Mull = Mll * LFll
Muhvl = Mhvl * LFhvl
Mu1 = Musw + Muslab + Musdl + Mull
Mu2 = Musw + Muslab + Musdl + Muhvl
Mu = Mcs + Mc
øMu = øm * Mu
Om = øm ! HTML report can`t handle ø symbol
OMu = øMu ! HTML report can`t handle ø symbol
Mmax = MAX (Mu1,Mu2)
Mllcap = øMu - Musw - Muslab - Musdl
!7 SHEAR DESIGN - Ultimate Design Parameters
WorkVar1 = LFsw*Vsw + LFslab*Vslab + LFsdl*Vsdl + LFll*Vll
IF (Vult = 0) THEN Vult = WorkVar1
st = 0.33*f`cg^0.5
f`cf = 0.6*f`cg^0.5
!7f Calculate Cracking Moment (Mcr) and Muomin
Mcr = 1E-6*Zgb*(f`cf + 1E3*P/Ag) + P*e*1E-3
Muomin = 1.2 * Mcr
! Suppress calculation of cracked moment of inertia & effective moment of inertia
!
! WorkVar1 = D - Ycgs
! Iccr = 0.3333*Ws*dn^3 + (Ep/Eg)*Ap*WorkVar1^2
!
! WorkVar1 = MAX(Mll,Mhvl)
! Msv = Msw + Mslab + Msdl + WorkVar1
! IF (Msv = 0.) Msv = Mcr
!
! WorkVar1 = (Mcr/Msv)
! Ief = Iccr + (Ic - Iccr)*WorkVar1^3
!7b SHEAR DESIGN - Flexure shear cracking
! Decompression moment & corresponding shear
scpf = -1000*P/Ag - 1000*P*e*Yb/Ig
Mo = -scpf*Zgb/10^6
IF (Mult = 0.) THEN
Vult = 0.
ELSE
Vo = Mo*Vult/Mult
END IF
! Calculate distance from the extreme compressn fibre to the
! centroid of the outermost layer of tensile R/F or tendons
SORT_LOW_HIGH (Ybarri, Fbari, Dsorti, Fsorti)
Ybarmin = Dsort1
do = D - Ybarmin
Def = D
doMin = 0.8*D
Beta1 = 1.1*(1.6 - do/1000)
IF (Beta1 < 1.1) THEN Beta1 = 1.1
Beta2 = 1.0 ! For Super-Ts (AS5100 Clause 8.2.7.1)
WorkVar1 = Span/2.
IF (x > WorkVar1) THEN
WorkVar2 = Span - x
ELSE
WorkVar2 = x
END IF
IF (Beta3 = 0) THEN Beta3 = 2*do*1000/WorkVar2
IF (Beta3 < 1) THEN Beta3 = 1.0
IF (Beta3 > 2) THEN Beta3 = 2.0
WorkVar1 = (Ast+Ap)*f`cg/(bv*do)
WorkVar2 = WorkVar1 ^ 0.333
Vuct = Beta1*Beta2*Beta3*bv*do*WorkVar2/1000.
Vucs = Vuct + Vo
!7c SHEAR DESIGN - Web shear cracking at centroid of composite section (direct solution)
sc = -P*1000/Ag + P*e*1000*(Yc-Yb)/Ig
Qlbwc = Qna/(Ic*Bw2)
IF (sc < st) THEN
tc = (st*st-st*sc)^0.5 ! Shear stress tau
ELSE
tc = 0.
END IF
WorkVar1 = 0.5*sc
WorkVar2 = WorkVar1*WorkVar1
s1c = (WorkVar2 + tc*tc)^0.5 + WorkVar1
Vtc = 1E-3*tc/Qlbwc
Mtc = Mult*Vtc/Vult ! Moment capacity corresponding to shear capacity Vtc
IF (Mtc > Mcr) THEN ! Section is cracked if Mtc > cracking moment Mcr
VuccNte$ = Cracked
Vucc = 0
ELSE
VuccNte$ = OK
Vucc = Vtc
END IF
!7d SHEAR DESIGN - Web shear cracking at the bottom of the web-flange interface
!
! The algorithm to determine the ultimate concrete shear capacity,
! Vtf, is based on RF Warner, BV Rangan, AS Hall and KA Faulkes,
! "Concrete Structures" (Addison Wesley Longman, Aust). Assume:
!
! y2 = Dist from web/flange interface to composite centroid
! y3 = Dist from web/flange interface to centroid of precast girder
! Dwf = Distance from bottom of girder to web/flange interface
! P = Final prestress force
! e = Eccentricity (CG girder-strand group)
! Ag = Area of precast girder
! Ig = Moment of Inertia of precast girder
! Ic = Composite moment of inertia
! sf = Flexural stress at web-flange interface for uncracked section
! st = Allowable principal tensile strength
! tf = Ultimate shear stress capacity of concrete on its own (tau)
! Bw2= Sum of widths of both webs
! Qfw = Shear flow constant at flange/web junction
! Mcf = Corresponding moment factor (= Mult/Vult)
! (used to calculate the corresponding flexural stress
! when the shear capacity is reached)
!
! The solution for Vtf is based on the following relationships:
!
! sf = (-P/Ag) - (P*e*y3/Ig) + Vtf*Mcf*y2/Ic .......... (1) Flexural stress
!
! st = 0.33SQRT(f'cg) = SQRT((sf/2)^2 + tf^2) + sf/2 .. (2) Tensile stress capacity
!
! Vtf = tf*Ic*Bw2/Qfw ............. (3) Shear force capacity
!
! Equations (1), (2) and (3) can be combined to form a quadratic with
! the only unknown being Vtf. The equations may be simplified by
! grouping the constants viz:
!
! Equation (1): Let
! s1 = (-P*1000/Ag) - (P*e*y3*1000/Ig)
! Mcf = Mult/Vult
! s2 = y2*10^6/Ic
! s3 = Mcf*s2
!
! Substituting, Equation (1) becomes: sf = s1 + Vtf*s3
!
! Equation (2): Let st = 0.33SQRT(f'cg)
! then: SQRT((sf/2)^2 + tf^2) + sf/2 = st
! reorganise: SQRT((sf/2)^2 + tf^2) = st - sf/2
! square both sides: (sf/2)^2 + tf^2 = st^2 + (sf/2)^2 - 2*st*sf/2
! simplify: tf^2 = st^2 - st*sf
! reorganise: tf^2 + st*sf - st^2 = 0.
!
! Equation (3): If Qlbwf = Qfw/(Ic*Bw2) then tf = Vtf*Qlbwf
!
! Substitute for tf and sf in equation (2):
! (Vtf*Qlbwf)^2 + st*(s1 + Vtf*s3) - st^2 = 0
! Expand: Qlbwf^2 * Vtf^2 + st*s3*Vtf + st*s1 - st^2 = 0
!
! To simplify the above expression let:
! a = Qlbwf^2
! b = st*s3 = st*Mcf*s2
! c = st*s1 - st*st
!
! Then: a*Vtf*Vtf + b*Vtf + c = 0 and the solution for Vtf is:
! Vtf = (-b +- SQRT(b*b - 4*a*c))/2*a
!
! Setting the determinant of this quadratic equation to:
! f = b*b - 4*a*c
! there is no solution if 'f' is negative. If 'f' is positive then:
! Vtf = (-b + SQRT(f))/2*a
y2 = Yc - Dwf
y3 = Yb - Dwf
Qlbwf = Qfw/(Ic*Bw2)
Mcf = Mult/Vult
s1 = -P*1000/Ag + P*e*1000*y3/Ig ! Convert kN to N
s2 = 10^6*y2/Ic ! Convert kN.m to N.mm
a = Qlbwf*Qlbwf*1E6
b = st*Mcf*s2
c = st*s1 - st*st
f = (b*b - 4*a*c)
IF (f < 0.) THEN
s1f = 0.
Vtf = 0.
Mtf = 999999.
ELSE
Vtf = (-b + f^0.5 )/(2*a)
sf = -P*1000/Ag + P*e*1000*y3/Ig + Vtf*Mcf*y2*1E6/Ic
tf = 1000*Vtf*Qlbwf
WorkVar1 = (0.5*sf)
WorkVar2 = WorkVar1*WorkVar1
WorkVar3 = WorkVar2 + tf*tf
WorkVar4 = WorkVar3^0.5
s1f = WorkVar4 + 0.5*sf
Mtf = Mult*Vtf/Vult ! Moment capacity corresponding to shear capacity (Vtf)
END IF
! Section is cracked if Mtf > cracking moment Mcr
IF (Mtf > Mcr) THEN
Vucf = 0.
VucfNte$ = Cracked
ELSE
Vucf = Vtf
VucfNte$ = OK
END IF
! SHEAR DESIGN - Determine Vuc
!
! As per AS5100.5-2004, Sectn 8.2.7.2 and
! Warner et al.,'Concrete Structures' 1998, Sectn 12.4
WorkVar1 = MAX (Vucs, Vucc, Vucf)
WorkVar2 = Vucs
IF (Vucs = 0.) THEN Workvar2 = WorkVar1
WorkVar3 = Vucc
IF (Vucc = 0.) THEN WorkVar3 = WorkVar1
WorkVar4 = Vucf
IF (Vucf = 0.) THEN WorkVar4 = WorkVar1
Vuc = MIN (WorkVar2, WorkVar3, WorkVar4)
! If section is cracked in flexure, only flexural-shear
! cracking Vuc applies (i.e. Vucs)
IF (Mult > Mcr) THEN Vuc = Vucs
!7e SHEAR DESIGN - Design of web shear reinforcement
IF (Os = 0.) THEN Os = 0.7 ! HTML report can`t handle `ø` symbol
Vumin = (Vuc + 0.6*Bw2*do/1000)
øVumin = Os*Vumin
Vumax = 0.2*f`cg*Bw2*do/1000 + Pv
øVumax = Os*Vumax
OVumin = øVumin ! HTML report can`t handle `ø` symbol
OVumax = øVumax ! HTML report can`t handle `ø` symbol
IF (Sv = 0.) Sv = Svmax
Svr1 = 0.
Svr2 = 0.
Asvsr = 0.
Asvsr1 = 0.
Asvsr2 = 0.
IF (øVumin > Vult) THEN
Ov = 30.
Svr = Svmax ! Required shear R/F spacing
Vus = 0.
AsNote1$ = Asv-min
AsNote2$ = N/A
ELSE
Ov = 0.
Svr = 0.
Vus = (Vult - 0.7*Vuc)/0.7
AsNote1$ = N/A
AsNote2$ = Asv Reqd
END IF
Ov1 = 30.
Ov2 = 30 + 15*(Vult - øVumin)/ (øVumax - øVumin)
IF (Ov2 > Ov1) THEN Ov1 = Ov2
IF (Ov1 > 45) THEN Ov1 = 45
IF (øVumin > Vult) THEN Ov1 = 0
IF (øVumin > Vult) THEN Ov2 = 0
IF (Dsr = 0) THEN Dsr = 16
Asv = 2*3.14*Dsr*Dsr/4
IF (fsysr = 0.) THEN fsysr = 250
IF (øVumin > Vult) THEN
Ovc = Ov
Asvsr1 = 0.35*Bw2/fsysr ! Required area of shear R/F per unit length
Svr1 = Asv/Asvsr1
ELSE
Ovc = Ov2
WorkVar1 = Ov1*3.14159/180. ! Convert to radians [for TAN function]
WorkVar2 = TAN(WorkVar1)
WorkVar3 = ABS(WorkVar2)
Asvsr2 = Vus*1000*WorkVar3/(do*fsysr)
Svr2 = Asv/Asvsr2
END IF
Asvsr = Asvsr1
IF (Asvsr < Asvsr2) THEN Asvsr = Asvsr2
IF (Svr2 > 300) THEN Svr2 = Svmax
IF (øVumin > Vult) THEN
Svr = Svmax
ELSE
Svr = ABS(Svr2)
END IF
Asvs = Asv/Sv
!8a DEFORMATIONS - Axial shortening and transfer hog
! Deflection & hog calculations are only valid at mid-span
IF (Lg = 0.) THEN Lg = Span
IF (Ptm = 0.) Ptm = Pt
Xe = Ptm*Lg*1E6/(Ag*Egmt) ! Elastic chortening
u3 = k1s*850
Xs = u3*Lg/1000 ! Shortening due to shrinkage
øccsc = 2*k2sc*k3sc
u4 = fcscgs*øccsc*1E6/Egmt
Xc = -u4*Lg/1000 ! Shortening due to creep
Xa = Xe + Xs + Xc ! Total axial shortening
Occsc = øccsc ! HTML reports can't handle ø symbol
Dsw = 40.*Mswx*Lg*Lg*1E12/(384.*Egmt*Ig)
Hps = -Ptm*1000*e*(Lg*1000)*(Lg*1000)/(8.*Egmt*Ig)
Htr = Dsw + Hps
!8b DEFORMATIONS - Deflections
Ddeck = 40. * Mslabx * Lg*Lg * 1E12 / (384. * Eg * Ig)
Dsdl = 40. * Msdlx * Lg*Lg * 1E12 / (384. * Eg * Ic)
Ddl = Ddeck + Dsdl
Dratio = Lg*1000/Dll
Dperm = Lg*1000/Drperm
!8c DEFORMATIONS - Hog due to creep
WorkVar5 = Ti ! Number of days to installation of girder
th1 = 2*Ag/Per
Fratio3 = f`cmi/f`cg
øcc1 = øccb1*k2c*k3c
Occ1 = øcc1 ! HTML report can`t handle ø symbol
Occb1= øccb1 ! HTML report can`t handle ø symbol
Ecc1 = fcgs * øcc1 * 1E6 / Egmi
Pc1 = Ecc1 * Ep * Ap / 1E9
!8d DEFORMATIONS - Girder hog at installation
WorkVar5 = Ty ! Estimated life of girder after installation
Hgic = øcc1*Htr
Hgips = -(Ptm + Pc1)*e*Lg*Lg*1E9/(8*Egmi*Ig)
Hgi = Hgic + Hgips + Dsw
!8e DEFORMATIONS - Final girder hog after installation
th2 = 2 * At / (Gp + 0.5 * Vp)
Fratio4 = f`cg / f`cg
øcc3 = øccb3 * (k2f-k2d) * k3f
Occ3 = øcc3 ! HTML report can`t handle ø symbol
Occb3 = øccb3 ! HTML report can`t handle ø symbol
Hel = Hgips + Dsw + Ddl
Hgfps = -P*e*Lg*Lg*1E9/(8*Egmt*Ig)
Hgfc = øcc3*Hel
Hgf = Hgfps + Hgfc + Dsw + Ddl
!9 SHEAR & TORSION CHECK - Design information to check strength of beam in torsion
!
! The design check is for:
! (a) Combined torsion & shear (re sufficiency of web steel)
! (b) Combined torsion & bending (re sufficiency of longitudinal steel)
!
! Two load cases are considered - Tult with correpsonding V and M; and
! - Vult with corresponding T and M
!
! References: (1) Section 8.3 AS5100.5-2004
! (2) "Concrete Structures" Warner et al. 1998
! (3) "Design of Prestressed Concrete", Ch 5, Gilbert & Mickleborough, 1990
! (4) Clause 8.3.3 AS5100.5 (to check for Web Crushing failure)
!
! Value of Jt may be assumed to be one of the following (Clause 8.3.3(3) AS5100.5):
! 0.4b2D for solid rectangles
! 0.4SUM(x2y) for solid T or I sections
! Am*2*bw for thin wall hollow sections
IF (Mvcorr = 0) THEN Mvcorr = Mult
DTRflag = 0 ! Used to indicate if torsional reinforcement is inadequate
!9a Calculate ultimate torsional strength limited by web crushing
Jt = Am*2*bw
Tumax = 0.2*f`cg*Jt/1000000 ! Eq 8.3.3(2) AS5100.5
! To prevent web crushing beams must be proportioned so that ratio Rtv < 1
! (Eq 8.3.3(1) AS5100.5) Vumax is calculated in the Shear Check section.
IF (Ot = 0.) THEN Ot = 0.7
Rtvt = Tult / (Ot * Tumax) + Vtcorr / (Os * Vumax )
Rtvv = Tvcorr / (Ot * Tumax) + Vult / (Os * Vumax )
Rtv = MAX(Rtvt,Rtvv)
Rtv = MIN(Rtv,2.0) ! Limit ratio to a maximum of 2.0
Tnote1$ = ^Web will not crush
Tnote18$ = Rtv must be less than 1.0 (Eq 8.3.3(1))
IF (Rtv > 1.) THEN
Tnote1$ = ?Web will crush
DTRflag = 1
END IF
!9b Check if torsional reinforcement is needed (Clause 8.3.4 AS5100.5)
!
! Calculate ultimate strength in pure torsion (Tuc)
Scp = P*1000/Ag
WorkVar1 = (1 + 10 * Scp / f`cg) ^ 0.5
Tuc = 0.3 * f`cg ^ 0.5* Jt * WorkVar1/1000000 ! Eq 8.3.5(1) AS5100.5
! Check if torsional reinforcement is needed (Clause 8.3.4(a) AS5100.5)
Tucmax = 0.25*Ot*Tuc
CloseTie = 0
Tnote2$ = ^Torsion reinforcement not required
IF (Tucmax < Tult) THEN
Tnote2$ = ?Torsional reinforcement (closed ties) required
CloseTie = 1
DTRflag = 1
END IF
Rtv1tmax = Tult/(Ot*Tuc) + Vtcorr/(Os*Vuc)
Rtv1tmax = MIN(Rtv1tmax,2.0) ! Limit ratio to a maximum of 2.0
Rtv1vmax = Tvcorr/(Ot*Tuc) + Vult/(Os*Vuc)
Rtv1vmax = MIN(Rtv1vmax,2.0) ! Limit ratio to a maximum of 2.0
Rtv1 = MAX(Rtv1tmax,Rtv1vmax)
Tnote20$ = Note: Tucmax must be > Tult and Rtv1 < 0.5
IF (Rtv1 > 0.5) THEN
Tnote2$ = ?Torsional reinforcement (closed ties) required
CloseTie = 1
DTRflag = 1
END IF
Tnote3$ = ^Closed ties are not required
IF (CloseTie > 0) THEN Tnote3$ = ?Closed ties are required
!9c Check for combined torsion and shear
! (a) Determine required Asw/s ratio
Vumin = Vuc + 0.6*bv*do/1000 ! Eq 8.2.9 AS5100
Vdesign = Vtcorr/Os
Tnote4$ = ^Vumin > Vdesign - No extra shear RF needed
IF (Vumin < Vdesign) THEN
Tnote4$ = ?Vumin < Vdesign - Extra shear RF needed
DTRflag = 1
END IF
Asvmin$ = Use Asvmin
IF (Vumin < Vdesign) Asvmin$ = Asvmin insuficient
! Calculate thetav and thetat for both Tult/Vtcorr and Vult/Tvcorr
thetav1 = 30 + 15*(Vtcorr - Os*Vumin)/(Os*Vumax - Os*Vumin)
thetav = thetav1
IF (thetav < 30) THEN thetav = 30
IF (thetav > 45) THEN thetav = 45
thetavc = thetav ! thetav due to corresp Vt
thetav1 = 30 + 15*(Vult - Os*Vumin)/(Os*Vumax - Os*Vumin)
thetav = thetav1
IF (thetav < 30) THEN thetav = 30
IF (thetav > 45) THEN thetav = 45
thetavm = thetav ! thetav due to max Vt
thetat1 = 30 + 15*(Tult - Ot*Tuc)/(Ot*Tumax - Os*Tuc) ! Warner, Eq 13.17
thetat = thetat1
IF (thetat < 30) THEN thetat = 30
IF (thetat > 45) THEN thetat = 45
thetatm = thetat ! thetat due to max T
thetat1 = 30 + 15*(Tvcorr - Ot*Tuc)/(Ot*Tumax - Os*Tuc) ! Warner, Eq 13.17
thetat = thetat1
IF (thetat < 30) THEN thetat = 30
IF (thetat > 45) THEN thetat = 45
thetatc = thetat ! Use Thetat due to corresp T
! Atg = area of polygon with vertices at the centre of the bars
nlegsh = 2 * nclty
WorkVar8 = thetatm * 3.14159 / 180. ! Use Theta corresp to max Torsion
WorkVar8 = TAN(WorkVar8)
Aswstm = Tult*1000000 / (Ot*2*fsysr*Atg/WorkVar8) ! Warner, Eq 13.21
WorkVar8 = thetatc * 3.14159 / 180. ! Use Theta corresp to correp Torsion
WorkVar8 = TAN(WorkVar8)
Aswstc = Tvcorr*1000000 / (Ot*2*fsysr*Atg/WorkVar8) ! Warner, Eq 13.21
Aswst = MAX(Aswstm, Aswstc)
WorkVar8 = thetavm * 3.14159 / 180. ! Use Theta corresp to max Vt
WorkVar8 = TAN(WorkVar8)
Aswsvm = Vult*1000 / (Os*nlegsh*fsysr*do/WorkVar8) ! Warner, Eq 13.23
WorkVar8 = thetavc * 3.14159 / 180. ! Use Theta corresp to corresp Vt
WorkVar8 = TAN(WorkVar8)
Aswsvc = Vtcorr*1000 / (Os*nlegsh*fsysr*do/WorkVar8) ! Warner, Eq 13.23
Aswsv = MAX(Aswsvm, Aswsvc)
Aswons = Aswst + Aswsv ! Min total required R/F (Warner, Eq 13.26)
IF (Aswons > 1E9) THEN Aswons = 1E9
IF (Acltie = 0) THEN
Acltie = 3.14*TieDiam^2 / 4
END IF
Asws = Acltie/Sdesign
IF (Asws > 1E9) THEN Asws = 1E9
! (b) Check minimum torsional reinforcement (Clause 8.3.7 AS5100.5)
Aswsmin1 = 0.35*bv / (nlegsh*fsysr) ! Warner, Eq 13.32
Aswsmin2 = 0.2*yt1 / fsysr ! AS5100 - Clause 8.3.7
IF (Aswsmin1 > Asws) THEN
Tnote6$ = ?Use minimum torsional reinforcement
DTRflag = 1
ELSE
Tnote6$ = ^Satisfies minimum ligs test (Warner, Eq 13.32)
END IF
IF (Aswsmin2 > Asws) THEN
Tnote7$ = ?Does not satisfy minimum ligs test
DTRflag = 1
ELSE
Tnote7$ = ^Torsional RF OK (Clause 8.3.7 AS5100)
END IF
WorkVar8 = thetatm * 3.14159 / 180.
WorkVar8 = TAN(WorkVar8)
Tus1 = 1E-6*2*fsysr*Asws*Atg / WorkVar8 ! Eq 8.3.5(2) AS5100
IF (Tus1 > 1E9) THEN Tus1 = 0
WorkVar8 = thetatc * 3.14159 / 180.
WorkVar8 = TAN(WorkVar8)
Tus2 = 1E-6*2*fsysr*Asws*Atg / WorkVar8 ! Eq 8.3.5(2) AS5100
IF (Tus2 > 1E9) THEN Tus2 = 0
Tus = MAX(Tus1, Tus2)
IF (Tus > Tuc) THEN
Tnote8$ = ^Asw/s satisfies Tus > Tuc
ELSE
Tnote8$ = ?May need to increase Asw/s to satisfy Tus>Tuc
DTRflag = 1
END IF
! Check if ratio T*/0t*Tus + V*/(0s*Vs+Pv) is less than 1
WorkVar8 = thetavm*3.14159/180.
WorkVar8 = TAN(WorkVar8)
WorkVar8 = WorkVar8 * 1000.
Vusteel1 = nlegsh*Asws*fsysr*do/WorkVar8 ! Eq 8.2.10 AS5100
Rtv2t = Tult/(Ot*Tus) + Vtcorr/(Os*Vusteel1 + Pv) ! Check max Torsion
WorkVar8 = thetavc*3.14159/180.
WorkVar8 = TAN(WorkVar8)
WorkVar8 = WorkVar8 * 1000.
Vusteel2 = nlegsh*Asws*fsysr*do/WorkVar8 ! Eq 8.2.10 AS5100
Rtv2c = Tvcorr/(Ot*Tus) + Vult/(Os*Vusteel2 + Pv) ! Check corrresp torsion
Rtv2 = MAX(Rtv2c, Rtv2t)
Vusteel = MAX(Vusteel1, Vusteel2) ! Ult shear strength of stirrups
IF (Rtv2 < 1) THEN ! Cl 8.3.4(b) AS5100
Tnote9$ = ^Combined shear/torsion ratio is OK
ELSE
Tnote9$ = ?Combined shear/torsion ratio > 1. Adjust Asws
DTflag = 1
END IF
Tnote22$ = Rtv2 must be < 1. If not, adjust Asws
! Design for closed ties for combined shear and torsion
Stiecalc = Acltie / Asws ! Raswsv is input by user
Sclostie = Stiecalc
Sclmax1 = 0.12 * ut
Sclmax = Sclmax1
IF (Sclmax > 300) THEN Sclmax = 300
IF (Sclostie > Sclmax) THEN ! Need to reduce spacing to maximum allowed
Sclostie = Sclmax
END IF
Raswsy = Acltie / Sclostie
IF (DTRflag = 0) THEN
DTRnote$ = ^Torsional R/F is OK
ELSE
DTRnote$ = ?Torsional R/F may be inadequate
END IF
!9d Design for additional longitudinal reinforcement (Clause 8.3.6 AS5100)
!
! (a) Flexural tensile zone
!
! Ftadd = Design tensile forces to be taken in addition to any design tensile forces due to flexure
! Ttcapbs = Tensile capacity of bars in tension zone including both strand and passive RF
! Ftmcorr = Tensile force due to moment corresponding to design Torsion
! Ftbdif = Residual capacity of bars in tension zone at the prescribed corresponding moment
!
! Ftadd = 0.5*Aswst*ut*(1/TAN(thetat/180*3.14))^2*fsysr/1000 ........Eqn 8.3.6(1)
! Atadd = 0.5*Aswst*ut*(1/TAN(thetat/180*3.14))^2 ........derived from 8.3.6(1)
!
! Where Aswst = Area of torsional R/F; thetat = corresponding angle of torsional RF
! Need to check the case for both max T as well as corresp T
WorkVar8 = thetatm * 3.14159 / 180.
WorkVar8 = TAN(WorkVar8)
WorkVar8 = 1.0 / WorkVar8
WorkVar8 = WorkVar8 ^ 2
ALRflag = 0
Ftadd1 = 0.5* Aswstm * ut * WorkVar8 * fsysr / 1000
Atadd1 = 0.5* Aswstm * ut * WorkVar8
WorkVar8 = thetatc * 3.14159 / 180.
WorkVar8 = TAN(WorkVar8)
WorkVar8 = 1.0 / WorkVar8
WorkVar8 = WorkVar8 ^ 2
Ftadd2 = 0.5* Aswstc * ut * WorkVar8 * fsysr / 1000
Atadd2 = 0.5* Aswstc * ut * WorkVar8
Ftadd = MAX(Ftadd1, Ftadd2)
Atadd = MAX(Atadd1, Atadd2)
! Note: Ftcapbs = tensile capacity of bars & strands in tensile zone
Ftcapbs = 0.
LOOP i = 1,8
IF (Ybarri < Yc) Ftcapbs = Ftcapbs + Fbari
END LOOP
LOOP i = 1,20
IF (Yrfi < Yc) Ftcapbs = Ftcapbs + Fbrfi
END LOOP
Ftmcorr = Mtcorr*1000 / (0.8*0.9*do) ! Tensile force due to corresp M
Ftbdif = Ftcapbs - Ftmcorr
LongReo = 0
Aaddltr = 0 ! Additional long'l torsional RF
Tnote21$ = Ftbdif must be > Ftadd and Abotreo > Aadltr
IF (Ftbdif < Ftadd) THEN
Tnote10$ = ?Additional longitudinal RF is required
LongReo = 1
Aadltr = (Ftadd - Ftbdif) * 1000 / fsysr
ALRflag = ALRflag + 1
ELSE
Tnote10$ = ^No extra longitudinal RF is required
END IF
! Calculate area of passive RF in tension zone
Abotreo = 3.14159*(BarDtens^2/4)*Ntbars ! NOTE: User sets BarDtens & Ntbars
WorkVar1 = 0
IF( Abotreo > Aadltr) THEN
Tnote11$ = ^Longitudinal RF in flexural tensile zone is OK
ELSE
Tnote11$ = ?Need more longitudinal RF in flexural tensile zone
ALRflag = ALRflag + 1
WorkVar1 = 1
END IF
IF( Abotreo = Aadltr) THEN
Tnote11$ = ^Longitudinal RF in flexural tensile zone is OK
ALRflag = ALRflag - WorkVar1
END IF
! Check flexural compression zone
! Fcadd = Additional force required in the compression zone
! Ftstrand = Tensile capacity of strand in compression zone
!
! Usually strands in the flange area are located within the flange/web region
! and hence enclosed by stirups. They can therefore be considered to be able
! to contribute to the torsional strength and have consequently been included
! in the calculations.
Fcadd0 = Ftadd - Mtcorr*1000000/(0.8*fsysr*0.85*do)
Fcadd = Fcadd0
IF (Fcadd < 0) Fcadd = 0
! Note Ftstrand = Tensile capacity of strands in compression zone
! (must be calculated here)
IF (Fcadd < Ftstrand) THEN
Aaddlcr = 0.
ELSE
Aaddlcr = (Fcadd - Ftstrand)*1000000 / (fsysr*Wtf)
END IF
IF (Scbars = 0) THEN
Atopreo = 0.
ELSE
Atopreo = 3.14159*(BarDcomp^2/4)*(1000/Scbars) ! User sets Scbars and BarDcomp
END IF
WorkVar1 = 0
IF (Atopreo > Aaddlcr) THEN
Tnote12$ = ^Long. RF in flexural compression zone OK
ELSE
Tnote12$ = ?Need more longitudinal RF in flexural compression zone
ALRflag = ALRflag + 1
WorkVar1 = 1
END IF
IF (Atopreo = Aaddlcr) THEN
Tnote12$ = ^Long. RF in flexural compression zone OK
ALRflag = ALRflag - WorkVar1
END IF
IF (ALRflag = 0) THEN
ALRnote$ = ^Additional longitudinal R/F is not required
ELSE
ALRnote$ = ?Additional longitudinal R/F is required
END IF