ACES PSC Module: Equations File (Last modified: 29/04/21)
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 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').
. Select critical combination function:
SELECT_CRITICAL_COMBINATIONS
This function will calculate the results of all SLS and ULS load
combinations flagged as to be included in the design, determine the
critical case, set the indicator flags indicsls and indiculs and copy the
load factors into LfSLSDL ,LfSLSPS ,LfSLSSDL,LfSLSDSh,LfSLSRcr,LfSLSDSt,
LfSLSL,L LfSLSDTe,LfSLSUTr,
LfULSDL ,LfULSPS ,LfULSSDL,LfULSDSh,LfULSRcr,LfULSDSt,
LfULSL,L LfULSDTe,LfULSUTr,
KNOWN INCONSISTENCIES
. Problem with negative sign in front of bracket:
WorkVar2 = (st-WorkVar1)^2 - (WorkVar1*WorkVar1) -- will not work,
use: WorkVar2 = (st-WorkVar1)^2 - WorkVar1*WorkVar1 or
WorkVar2 = (st-WorkVar1)^2 - 1. * (WorkVar1*WorkVar1)
***************************** 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 (fcrack = 0.) fcrack = 200.
IF (Cover = 0.) Cover = 30.
IF (Sw = 0.) Sw = 10.547
CODE$ = AS5100-2017
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
IF (Ws = 0.) THEN Ws = Wtf
IF (Ts = 0.) THEN Ts = 200.
IF (bef = 0.) THEN bef = Ws
IF (Es = 0.) THEN Es = n * Eg
IF (n = 0.) THEN n = Es/Eg
Bw2 = 2*bw
bv = Bw2
! Check auto-recalculate option on composite properties panel (Properties tab)
IF (Zt = 0.) THEN Zt = Ig / (Dg - Yb)
IF (Zb = 0.) THEN Zb = Ig / Yb
IF (CalcProp = 1) THEN
CalcPrp$ = Composite section properties recalculated by ACES
! Zt = Ig / (Dg - Yb)
! Zb = Ig / Yb
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
! Set overall depth of section to depth of girder if it has not been set yet
IF (D = 0.) THEN D = Dg
! Calculation of shear flow at centroid and web/flange
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
IF (CalcProp = 1) THEN
Qna = Areac * Ybarc ! Shear flow at centroid point x2
END IF
! Shear at BD03 point X1
Ybflang = (Yb - Ybf) ! Bottom flange to girder centroid
WorkVar1 = (Yb - Dwf) ! Height of web block
Areac = Abf + WorkVar1 * Bw2 ! Shear area below composite centroid
Ymomsc = Abf * Ybflang + WorkVar1 * Bw2* WorkVar1 / 2. ! MOI below composite centroid
Ybarc = Ymomsc / Areac ! Centroidal offset of section below centroid
!Qnagx1 = Areac * Ybarc ! girder shear flow at girder point x1
!Qnacx1 = Areac * (Ybarc + Yc - Yb) ! composite shear flow at girder point x1
! Shear at BD03 point X2
Ybflang2 = (Yc - Ybf) ! Bottom flange to girder centroid
WorkVar1 = (Yc - Dwf) ! Height of web block
Areac = Abf + WorkVar1 * Bw2 ! Shear area below composite centroid
Ymomsc = Abf * Ybflang2 + WorkVar1 * Bw2* WorkVar1 / 2. ! MOI below composite centroid
Ybarc = Ymomsc / Areac ! Centroidal offset of section below centroid
WorkVar1 = Yc-Yb
!Qnagx2 = Areac * (Ybarc - WorkVar1) ! girder shear flow at girder point x1
!Qnacx2 = Areac * Ybarc ! composite shear flow at girder point x1
! Calculations for Web/flange joint (BD03 point Y)
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
IF (Qfw = 0) THEN
Qfw = Areac * (Yc-Dwf) ! Shear flow at web/flange interface
END IF
IF (Qwfg = 0) THEN
Qfwg= Areac * (Yb-Dwf) ! Shear flow at web/flange interface girder only
END IF
IF (Qna < 0.) THEN Qna = -Qna
IF (Qfw < 0.) THEN Qfw = -Qfw
!2a SECTION PROPERTIES TAB - Non-prestressed reinforcement
!
! (Zero out total)
Nrfbarst = 0
Arft = 0
Ynbarsrf = 0
LOOP i = 1,20
Nrfbarst = Nrfbarst + Nrfbrsi ! Total number of non-ps bars
END LOOP
LOOP i = 1,20
WorkVar1 = 3.14159 * BarDtri * BarDtri / 4
Arfi = WorkVar1 * Nrfbrsi ! Area of non-ps bars in each row
END LOOP
LOOP i = 1,20
Arft = Arft + Arfi ! Total area of non-ps bars
END LOOP
Arl = Arft ! Total area of passive reinforcement
LOOP i = 1,20
YbxNrfi = Yrfi * Arfi ! Bar moment of area
END LOOP
LOOP i = 1,20
Ynbarsrf = Ynbarsrf + YbxNrfi ! Total of bar moment of area
END LOOP
!
!*************************************************************************
!
!3a PS ESTIMATES TAB - Differential Shrinkage
! The calculation of parameters u1 and u2 has been hard-coded into the PSC module.
! To view these calculations click the button on the
! dialog box or the button on the PS Estimates tab.
At = Ag + Ws * Ts
th = 2*At/(Gp + 0.5*Vp)
IF (th > 2000.) THEN th = 2000. ! limit in case GP and Vp are zero
th1 = 2*Ag/Per ! Girder before made composite
IF (th1 > 2000.) THEN th1 = 2000. ! limit in case Per is zero
u = u2 - u1
IF (n = 0.) THEN n = Es/Eg
ec = Ys-Yc
! The calculation of parameter Rcf has been hard-coded into the PSC module.
! To view these calculations click the button on the
! dialog box or the button on the PS Estimates tab.
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
IF (ManLosCa = 0.) THEN
fts = Fsus - Mshr*1E6/Zst
fbs = Fsus - Mshr*1E6/Zsb
ftg = Fsug - Mshr*1E6/Zgt
fbg = Fsug + Mshr*1E6/Zgb
END IF
!3b PS ESTIMATES TAB - Prestress Forces
!
! Remove debonded bars from the analysis
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
! Moment of number of bars
YbxNb1 = Ybarr1 * Nbarb1
YbxNb2 = Ybarr2 * Nbarb2
YbxNb3 = Ybarr3 * Nbarb3
YbxNb4 = Ybarr4 * Nbarb4
YbxNb5 = Ybarr5 * Nbarb5
YbxNb6 = Ybarr6 * Nbarb6
YbxNb7 = Ybarr7 * Nbarb7
YbxNb8 = Ybarr8 * Nbarb8
Nbars = 0
LOOP i = 1,8
Nbars = Nbars + Nbarti ! Total number of bars in layers 1 to 8 (Nbart1 to Nbart8)
END LOOP
Ndbars = 0
LOOP i = 1,8
Ndbars= Ndbars+ Nbardi ! Total number of debonded bars in layers 1 to 8
END LOOP
IF (Nbars = 0) THEN
Ntubbars = 0.
ELSE
Ntubbars = 100. * Ndbars / Nbars
END IF
Nbbars = 0
LOOP i = 1,8
Nbbars= Nbbars+ Nbarbi ! Find total number of bars (not including debonded bars)
END LOOP
Ynbars = 0
LOOP i = 1,8
Ynbars= Ynbars+ YbxNbi ! Find total moment of area of bars in each layer
END LOOP
! Calculate Pj; Centroid of bar group (Ycgs); Eccentricity of group (e)
Pj = Nbbars*Pult*Jf
IF (Nbbars = 0) THEN
Ycgs = 0.
e = 0.
ELSE
Ycgs = Ynbars / Nbbars
e = Yb - Ycgs
END IF
!
!*************************************************************************
!
!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
IF (Lsr = 0.) THEN Lsr = 100*Lsrl
IF (ManLosCa = 0.) THEN
Prl = -Lsr*Pj/100.
Pjr = Pj + Prl
END IF
IF (ManLosCa = 1.0) THEN
Prl = -Lsr*Pj/100.
Pjr = Pj + Prl
END IF
IF (ManLosCa = 2.0) THEN
Lsr = 0.
Prl = 0.
END IF
! PRESTRESS LOSSES TAB - Elastic Deformation Losses
Ap = Nbbars * Aps
Apt= Ap
fcgs = -Pjr*1000*(1/Ag + e*e/Ig) + Msw*1E6*e/Ig
IF (ManLosCa = 0.) THEN
Pelastic = fcgs*Ep*Ap/(Egmt*1000)
Ledl = -Pelastic*100/Pj
Pt = Pjr + Pelastic
Ltr = Pt*100/Pj
END IF
IF (ManLosCa = 1.0) THEN
Pelastic = -Ledl*Pj/100.
Pt = Pjr + Pelastic
Ltr = Pt*100/Pj
END IF
IF (ManLosCa = 2.0) THEN
Pelastic = 0.
Ledl = 0.
Pt = 0.
Ltr = 0.
END IF
! PRESTRESS LOSSES TAB - Shrinkage Losses
! The calculation of parameter us has been hard-coded into the PSC module.
! To view these calculations click the button on the PS
! Losses tab.
IF (ManLosCa = 0.) THEN
Pshr = -us*Ep*Ap*1E-9/(1 + 15*Arl/Ac) ! Clause 3.4.3.2
Lshr = -Pshr*100/Pj
Prs = Pt + Pshr
END IF
IF (u5 = 0.) THEN u5 = us
IF (ManLosCa = 1.0) THEN
Pshr = -Lshr*Pj/100.
Prs = Pt + Pshr
END IF
IF (ManLosCa = 2.0) THEN
Pshr = 0.
Lshr = 0.
Prs = 0.
END IF
! PRESTRESS LOSSES TAB - Creep loss parameters
Fratio = f`cmt/f`cg
!4e PRESTRESS LOSSES TAB - Creep losses due to PS + SW
! The calculation of parameter øcc has been hard-coded into the PSC module.
! To view these calculations click the button on the dialog box or the button on the
! PS Losses tab.
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*0.8*fcscgs*øcc/Eg ! Eqn 3.4.3.3
!4f PRESTRESS LOSSES TAB - Creep losses due to Deck + SDL
Fdeck = Mslab*1E6*(Yb-Ycgs)/Ig
Fsdl = Msdl * 1E6*(Yc-Ycgs)/Ic
! The calculation of parameter øcc2 has been hard-coded into the PSC module.
! To view these calculations click the button on the dialog box or the button on the
! PS Losses tab.
Occ2 = øcc2 ! HTML Reports cannot handle ø symbol
ucc2 = 0.8*øcc2*1E6*(Fdeck+Fsdl)/Eg ! Eqn 3.4.3.3
! PRESTRESS LOSSES TAB - Total creep losses
ucc = ucc1 + ucc2
IF (ManLosCa = 0.) THEN
Pcreep = ucc*Ep*Ap/1E9
Lcr = -Pcreep*100/Pj
P = Pt+Pshr+Pcreep
Ltt = P*100/Pj
END IF
IF (ManLosCa = 1.0) THEN
Pcreep = -Lcr*Pj/100.
P = Pt+Pshr+Pcreep
Ltt = P*100/Pj
END IF
IF (ManLosCa = 2.0) THEN
Pcreep = 0.
Lcr = 0.
P = Ltt*Pj/100.
END IF
TotPSlos = 100. - Ltt
!
!*************************************************************************
!
!5 SERVICEABILITY CHECK - Girder stresses at transfer
SELECT_CRITICAL_COMBINATIONS
! Calculate factored moments from crtitical combination
Mswfact = Msw*LfSLSDL
Mslafact = Mslab*LfSLSDL
MSDLfact = Msdl*LfSLSSDL
MLLfact = Mll*LfSLSLL
MPrefact = Msecpres*LfSLSPS
MDshfact = Mdiffshr*LfSLSDSh
MRCrfact = Mrescree*LfSLSRcr
MDThtfac = Mdiffteh*LfSLSDTe
MDTctfac = Mdifftec*LfSLSDTe
MDSefact = Mdiffset*LfSLSDSt
MUsTfact = Musertra*LfSLSUTr
! Calculate basic stresses
WorkVar1 = SLScombu
WorkVar2 = ULScombu
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
Mpe = -P*e/1000
! Calculate stresses at various locations on girder section
fgtss1 = -P*1000/Ag
fgbss1 = fgtss1
fgtss2 = -Mpe*1E6/Zt
fgbss2 = Mpe*1E6/Zb
fgtss3 = -Mswfact*1E6/Zt
fgbss3 = Mswfact*1E6/Zb
fgtss4 = -Mslafact*1E6/Zt
fgbss4 = Mslafact*1E6/Zb
fstss5 = -MSDLfact*1E6/Zst
fsbss5 = -MSDLfact*1E6/Zsb
fgtss5 = -MSDLfact*1E6*SDLf/Zgt
fgbss5 = MSDLfact*1E6*SDLf/Zgb
fstss6 = fts
fsbss6 = fbs
fgtss6 = ftg
fgbss6 = fbg
fstss7 = -MLLfact*1E6/Zst
fsbss7 = -MLLfact*1E6/Zsb
fgtss7 = -MLLfact*1E6/Zgt
fgbss7 = MLLfact*1E6/Zgb
fstmpre = -MPrefact*1E6/Zst
fsbmpre = -MPrefact*1E6/Zsb
fgtmpre = -MPrefact*1E6/Zgt
fgbmpre = MPrefact*1E6/Zgb
fstmdsh = -MDshfact*1E6/Zst
fsbmdsh = -MDshfact*1E6/Zsb
fgtmdsh = -MDshfact*1E6/Zgt
fgbmdsh = MDshfact*1E6/Zgb
fstmcre = -MRCrfact*1E6/Zst
fsbmcre = -MRCrfact*1E6/Zsb
fgtmcre = -MRCrfact*1E6/Zgt
fgbmcre = MRCrfact*1E6/Zgb
! Ignore input temp stresses if diff temp load case excluded
IF (LfSLSDTe = 0.) THEN
fstmdth = 0.
fsbmdth = 0.
fgtmdth = 0.
fgbmdth = 0.
fstmdtc = 0.
fsbmdtc = 0.
fgtmdtc = 0.
fgbmdtc = 0.
ftemstma = 0.
ftemsbma = 0.
ftemgtma = 0.
ftemgbma = 0.
ftemstmi = 0.
ftemsbmi = 0.
ftemgtmi = 0.
ftemgbmi = 0.
ELSE
fstmdth = -MDThtfac*1E6/Zst + ftempsth
fsbmdth = -MDThtfac*1E6/Zsb + ftempsbh
fgtmdth = -MDThtfac*1E6/Zgt + ftempgth
fgbmdth = MDThtfac*1E6/Zgb + ftempgbh
fstmdtc = -MDTctfac*1E6/Zst + ftempstc
fsbmdtc = -MDTctfac*1E6/Zsb + ftempsbc
fgtmdtc = -MDTctfac*1E6/Zgt + ftempgtc
fgbmdtc = MDTctfac*1E6/Zgb + ftempgbc
ftemstma = MAX(fstmdth,fstmdtc)
ftemsbma = MAX(fsbmdth,fsbmdtc)
ftemgtma = MAX(fgtmdth,fgtmdtc)
ftemgbma = MAX(fgbmdth,fgbmdtc)
ftemstmi = MIN(fstmdth,fstmdtc)
ftemsbmi = MIN(fsbmdth,fsbmdtc)
ftemgtmi = MIN(fgtmdth,fgtmdtc)
ftemgbmi = MIN(fgbmdth,fgbmdtc)
END IF
IF (ftemstma < 0.) ftemstma = 0.
IF (ftemsbma < 0.) ftemsbma = 0.
IF (ftemgtma < 0.) ftemgtma = 0.
IF (ftemgbma < 0.) ftemgbma = 0.
IF (ftemstmi > 0.) ftemstmi = 0.
IF (ftemsbmi > 0.) ftemsbmi = 0.
IF (ftemgtmi > 0.) ftemgtmi = 0.
IF (ftemgbmi > 0.) ftemgbmi = 0.
fstdset = -MDSefact*1E6/Zst
fsbdset = -MDSefact*1E6/Zsb
fgtdset = -MDSefact*1E6/Zgt
fgbdset = MDSefact*1E6/Zgb
fstmutr = -MUsTfact*1E6/Zst
fsbmutr = -MUsTfact*1E6/Zsb
fgtmutr = -MUsTfact*1E6/Zgt
fgbmutr = MUsTfact*1E6/Zgb
! SERVICEABILITY CHECK - Final design DL+SDL+LL+other stresses
!
! Only add in temperature if it materially increases the stress value
fstll = fstss5+fstss6+fstss7+fstmpre+fstmdsh+fstmcre+fstdset+fstmutr
IF (fstll > 0.) THEN
fstll = fstll + ftemstma
ELSE
fstll = fstll + ftemstmi
END IF
fsbll = fsbss5+fsbss6+fsbss7+fsbmpre+fsbmdsh+fsbmcre+fsbdset+fsbmutr
IF (fsbll > 0.) THEN
fsbll = fsbll + ftemsbma
ELSE
fsbll = fsbll + ftemsbmi
END IF
fgtll = fgtss1+fgtss2+fgtss3+fgtss4+fgtss5+fgtss6+fgtss7+fgtmpre+fgtmdsh+fgtmcre+fgtdset+fgtmutr
IF (fgtll > 0.) THEN
fgtll = fgtll + ftemgtma
ELSE
fgtll = fgtll + ftemgtmi
END IF
fgbll = fgbss1+fgbss2+fgbss3+fgbss4+fgbss5+fgbss6+fgbss7+fgbmpre+fgbmdsh+fgbmcre+fgbdset+fgbmutr
IF (fgbll > 0.) THEN
fgbll = fgbll + ftemgbma
ELSE
fgbll = fgbll + ftemgbmi
END IF
! SERVICEABILITY CHECK - Determine maximum values
Msdlf = Msdl*LfSLSSDL
! Calculate maximum stresses
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
! (There is no direct access to this check - it is hard coded into the module)
ANALYSE_SLS_BY_LINEAR_ELASTIC_STRAIN
fslscrck = MAX (fcoincps,fcoincre) ! Determine max stress increment
! Set up messages
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
!5d SERVICEABILITY CHECK - Fatigue (AS5100.5 Cl 2.5)
IF (NumVftge = 0.) NumVftge = 40000
IF (Rfactor = 0) Rfactor = 1
FtgeFact = 1.
IF (Rfactor = 2) FtgeFact = 0.7
IF (Rfactor = 3) FtgeFact = 0.5
IF (Rfactor = 4) FtgeFact = 0.3
Ncycftge = NumVftge * 20000 * FtgeFact / Span^0.5
IF (SLSok = 1.) THEN WorkVar1 = 0.
IF (Ncycftge < 500000.) THEN
Ftgeck$ = ^Fatigue check not needed for road bridges
FtgueRqd = 0
ELSE
Ftgeck$ = ?Fatigue check required for road and rail bridges
FtgueRqd = 1.
END IF
fftgeps = 100.
fftgere = 150.
f`cftge = -0.45 * f`cs
IF (f`cftge < -18.) f`cftge = -18.
! Calculate the distance from the extreme compression fibre to the centroid
! of the outermost layer of tensile R/F or tendons.
! (There is no access to this routine. It is hard-coded into the programme).
SORT_LOW_HIGH (Ybarri, Fbari, Dsorti, Fsorti)
Ybarmin = Dsort1
do = D - Ybarmin
! Calculate allowable shear in web limited by compressive strength (Cl 2.5.3)
WorkVar1 = 0.2*f`cg*Bw2*do/1000 + Pv
Vucftge = 0.6 * WorkVar1
Vfatigue = Vftge + Vsw + Vslab + Vsdl
y2 = Yc - Dwf
Mfatigue = Mftge + Msw + Mslab + Msdl
fcslabf = -Mfatigue *1E6 /Zst
fcwebf = -Mfatigue *y2*1E6/Ic
! Calculate the stress range in steel
!
Ybarrmax = 0.
LOOP i = 1,8
WorkVar2 = 0.
IF (Ybarri > 1.) THEN WorkVar2 = Yc - Ybarri
IF (WorkVar2 > Ybarrmax) THEN Ybarrmax = WorkVar2 ! Max distance of PS strand from centroid
END LOOP
IF (Ybarrmax > 1.) THEN
fsrangps = Mftge * 1E6 * Ybarrmax / Ic
ELSE
fsrangps = 0.
END IF
Yrfmmax = 0.
LOOP i = 1,20
WorkVar2 = 0.
IF (Yrfi > 1.) THEN WorkVar2 = Yc - Yrfi
IF (WorkVar2 > Yrfmmax) THEN Yrfmmax = WorkVar2 ! Max distance of passive R/F from centroid
END LOOP
IF (Yrfmmax > 1.) THEN
fsrangre = Mftge * 1E6 * Yrfmmax / Ic
ELSE
fsrangre = 0.
END IF
Ftgcheck = 0
! Check all fatigue criteria
IF (fcslabf < f`cftge) THEN Ftgcheck = 1.
IF (fcwebf < f`cftge) THEN Ftgcheck = 1.
IF (Vfatigue > Vucftge) THEN Ftgcheck = 1.
IF (fsrangps > fftgeps) THEN Ftgcheck = 1.
IF (fsrangre > fftgere) THEN Ftgcheck = 1.
IF (Ftgcheck = 0.) THEN
FtgeOK$ = ^Fatigue check OK
ELSE
FtgeOK$ = ?Fatigue check failed
END IF
!
!*************************************************************************
!
!6b ULTIMATE MOMENT CHECK - Input data & constants
Dp = D - Ycgs
IF (fp = 0.) THEN 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
Dpbari = D - Ybarri ! Strand depths
END LOOP
LOOP i = 1,20
Dprfi = D - Yrfi ! Passive reinforcement depths
END LOOP
LOOP i = 1,8
Apbari = Nbarbi * Aps ! Strand areas
END LOOP
! Passive reinforcement areas (Arfi) are already calculated
LOOP i = 1,8 NOTRACK
Fbari = Apbari * fpu/1000. ! Forces in strand (for simplified method)
IF (Fbari = 0.) THEN Dpbari = 0.
END LOOP
LOOP i = 1,20 NOTRACK
Fbrfi = Arfi * fsy / 1000. ! Forces in passive R/F (for simplified method)
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 the top fibre. There is no access to this routine (hard-coded).
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'.
! (There is no access to this routine. It is hard-coded into the module).
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
Ast = 0.
LOOP i = 1,20
WorkVar1 = Arfi
IF (Dprfi > Dcb) Ast = Ast + WorkVar1 ! Area of passive reinforcement in tension zone
END LOOP
Ftstrand = 0.
Aptensn = 0.
LOOP i = 1,8
IF (Fbari = 0.) Yelds$i =
IF (Ybarri > Yc) THEN
Ftstrand = Ftstrand + Fbari ! Total force in strand
Aptensn = Aptensn + Apbari
END IF
END LOOP
LOOP i = 1,8
ubari = 0.
IF (Apbari > 0.) ubari = 1E9 * Fbari / (Ep*Apbari) ! Strain in strand
END LOOP
LOOP i = 1,20
IF (Fbrfi = 0.) Yeldr$i = ! Blank out yield message
END LOOP
LOOP i = 1,20
ubrfi = 0.
IF (Arfi > 0.) ubrfi = 1E9 * Fbrfi / (Esr*Arfi) ! Strain in non-ps bars
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 ! Total forces in strand
Msteel = Msteel + Mbari ! Total moment due to strand forces
END LOOP
LOOP i = 1,20 NOTRACK
Fsteel = Fsteel + Fbrfi ! Add forces in non-ps bars
Msteel = Msteel + Mbrfi ! Add moments in non-ps bars
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
! Find maximum of the temperature secondaries
Mdifftma = MAX (Mdiffteh,Mdifftec)
! Apply load factors to moments
UMswfact=Msw*LfULSDL
UMslafac=Mslab*LfULSDL
UMSDLfac=Msdl*LfULSSDL
UMLLfact=Mll*LfULSLL
UMPrefac=Msecpres*LfULSPS
UMDshfac=Mdiffshr*LfULSDSh
UMRCrfac=Mrescree*LfULSRcr
UMDTmafa=Mdifftma*LfULSDTe
UMDSefac=Mdiffset*LfULSDSt
UMUsTfac=Musertra*LfULSUTr
! Legacy
Musw = UMswfact
Muslab = UMslafac
Musdl = UMSDLfac
Mull = UMLLfact
Muhvl = UMLLfact
! Find total sum of moments
Mu1 = UMswfact+UMslafac+UMSDLfac+UMLLfact+UMPrefac+UMDshfac+UMRCrfac+UMDTmafa+UMDSefac+UMUsTfac
Mdesmax = Mu1
Mu2 = Mu1
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
! Load rating check for moments (limit set at 4 for graphing purposes)
IF (Mull = 0) THEN
Muratll = 0.
ELSE
Muratll = Mllcap / Mull
END IF
IF (Muratll > 4.) THEN Muratll = 4.
IF (Muhvl= 0) THEN
Murathvl = 0.
ELSE
Murathvl = Mllcap / Muhvl
END IF
IF (Murathvl > 4.) THEN Murathvl = 4.
Mrattarg = 1.0
!*******************************************************************************
!7 SHEAR DESIGN - Ultimate Design Parameters
! (See deletedshear.txt for equations removed)
IF (s = 0.) THEN s = 300.
!7a Clause 8.2.1.2 Consideration of torsion
Scp = P*1000/Ag
IF (Ot = 0.) THEN Ot = 0.7
IF (Os = 0.) THEN Os = 0.7
pc = uc
WorkVar1 = 0.33 * f`cg^0.5
WorkVar2 = 1 + Scp / WorkVar1
Tcr = WorkVar1 * Acp * Acp * WorkVar2^0.5 * 1E-6 / uc
phiTcr = Tcr * Ot
Tcrmin = 0.25 * phiTcr
IF (Tdesign > Tcrmin) THEN
Torsflag = 1
TorChck$ = ?T* > Tcrmin - torsional effects to be considered
ELSE
Torsflag = 0
TorChck$ = ^T* < Tcrmin - no need to check torsional effects
END IF
! Check torsional requirements for cellular structure (eq. 8.2.1.2(3))
! (Note that in all cases pc = uc)
Ao = 0.85 * Aoh
a1 = Acp * Acp * 1E-6 / uc
a2 = 2 * Ao * bv * 1E-6
IF (a1 < a2) THEN
TrCheck$ = ^Torsional reqrmnts for cellular structure satisfied (a1a2)
END IF
IF (Mexmin < Mdesign) THEN
MexChck$ = ^OK (Mexmin < M*)
ELSE
MexChck$ = ?Mexmin > M* Moment exceeds allowable
END IF
!7b Vuc shear check (Cl 8.2.4.1 to 8.2.4.4)
!
! Calculate equivalent shear due to combined shear + torsion (eq 8.2.1.4(5))
! Calculate default for Dcfcnp if necessary
WorkVar1 = 0.
IF (Arft > 0.) WorkVar1 = D - Ynbarsrf / Arft
IF (WorkVar1 = 0) WorkVar1 = D - Ycgs
IF (Dcfcnp < 1) Dcfcnp = WorkVar1
Veq = Vdesign + Tdesign * 1E3 * Dcfcnp / (2. * Ao)
! Calculate centroid of tensile steel
Atens = 0.
WorkVar2 = 0. ! accumulator for area*depth
LOOP i = 1,8
WorkVar1 = Apbari
IF (Dpbari > Dcb) Atens = Atens + WorkVar1 ! Area of strand in tension zone
IF (Dpbari > Dcb) WorkVar2 = WorkVar2 + Dpbari * WorkVar1 ! MOI of strand in tension zone
END LOOP
AbarsFt = 0. ! AbarsFt gets re-calculated later looping 11->20
LOOP i = 1,20
WorkVar1 = Arfi
IF (Dprfi > Dcb) AbarsFt = AbarsFt + WorkVar1 ! Area of all non-ps bars in tension zone
IF (Dprfi > Dcb) WorkVar2 = WorkVar2 + Dprfi * WorkVar1 ! accumulate MOI of non-ps bars
END LOOP
! Calculate dv (greater of .72D and .9 dcts)
dcts = WorkVar2 / (Atens + AbarsFt)
WorkVar2 = 0.9 * dcts
WorkVar3 = 0.72 * D
dv = MAX (WorkVar2,WorkVar3)
fpo = 0.7 * fp
Act = Areac
CALCULATE_EX_VALUES
! Calculate concrete contribution to ultimate shear strength Vuc (Eq 8.2.4.1)
WorkVar1 = 1. + 1500. * ex
kv = 0.4 / WorkVar1 ! Eq 8.2.4.2(4)
WorkVar1 = f`cg ^ 0.5
Vuc = kv * WorkVar1 * bv * dv * 1E-03
!7c Transverse shear requirements (Cl 8.2.1.7)
! Calculate angle of inclined compression
Ov = 29 + 7000 * ex
! Cl 8.2.1.6
Vucap = 0.5 * Os * Vuc
IF (Vucap > Vdesign) THEN
ShearRF$ = ^V* < Vucap - transverse shear RF not required
ELSE
ShearRF$ = ?V* > Vucap - transverse shear RF required
END IF
IF (fsysr = 0.) THEN fsysr = 500
IF (Dsr = 0) THEN Dsr = 16
IF (nVbars = 0) nVbars = 2
Asv = nVbars * 3.14 * Dsr * Dsr / 4
WorkVar1 = (Ov*3.14159/180.)
WorkVar2 = TAN (WorkVar1)
WorkVar3 = 1. / WorkVar2 ! cot(Ov)
Vus = (1E-3*Asv * fsysr * dv) / (s * WorkVar2)
! Calculate minimum transverse shear reinforcement (Cl 8.2.1.7)
WorkVar1 = f`cg ^ 0.5
Asvmin = 0.08 * WorkVar1 * bv * s / fsysr
IF (Asv > Asvmin) THEN
MinShRF$ = ^Asv > Asvmin - transverse shear RF OK
ELSE
MinShRF$ = ?Asv > Asvmin - insufficient transverse shear RF
END IF
Vu = Vus + Vuc
phiVu = Os * Vu
IF (Veq < phiVu) THEN
VuNote1$ = ^OK (Veq < Øt*Vu)
ELSE
VuNote1$ = ?Veq > Øt*Vu - Insufficient design shear strength
END IF
Vumax = 1E-3 * 0.55 * f`cg * bv * dv * WorkVar3 / (1. + WorkVar3*WorkVar3)
IF (Vumax < Vu) THEN
VuNote2$ = ?Vu.max < Vu - Web crushing may occur
ELSE
VuNote2$ = ^Vu < Vu.max Web crushing will not occur
END IF
!7d Combined shear and torsion check (Cl 8.2.4.5)
twmin = Aoh / uh
tw = bv ! Set wall thickness to web thickness for shear
IF (tw > twmin) THEN
WebCrsh$ = ^tw > twmin - Wall thickness OK
ELSE
WebCrsh$ = ?tw < twmin - Insufficient wall thickness
END IF
WorkVar1 = Vdesign * 1E3 / (bv * dv)
WorkVar2 = Tdesign * 1E6 / (1.7 * tw * Aoh)
Svt = WorkVar1 + WorkVar2
Svmaxx = Os * Vumax * 1E3 / (bv * dv)
IF (Svmaxx > Svt) THEN
Crush$ =^OK - Web will not crush (Svmaxx > Svt)
ELSE
Crush$ =?Web will crush (Svmaxx < Svt)
END IF
Asw = Asv / nVbars
Tus = 1E-6 * 2. * Ao * Asw * fsysr * WorkVar3 / s ! WorkVar3 = cot(Ov)
IF (Tus > Tdesign) THEN
TusNote$ = ^OK (Tus > T*)
ELSE
TusNote$ = ?Torsional reinforcement required (Tus < T*)
END IF
IF (Tus > Tcr) THEN
TcrNote$ = ^OK (Tus > Tcr)
ELSE
TcrNote$ = ?Tus < Tcr - Torsional reinforcement required
END IF
IF (y1 = 0.) y1 = D - 2.*Cover
ReoRatio = Asw / s
fsyRatio = 0.2 * y1 / fsysr
IF (ReoRatio > fsyRatio) THEN
ReoRati$ = ^OK (Asw/s > fsyRatio)
ELSE
ReoRati$ = ?Asw/s < fsyRatio - Insufficient torsional reinforcement
END IF
!7e Check transverse reinforcement for combined shear and torsion (Cl 8.2.5.3)
WorkVar1 = (Vdesign - Os*Vuc) * 1E3 * s
WorkVar2 = fsysr * dv * WorkVar3 ! WorkVar3 = cot(Ov)
Aswsv = WorkVar1 / WorkVar2
IF (Aswsv < 0.) THEN Aswsv = 0.
WorkVar1 = Tdesign * 1E6 * s
WorkVar2 = 2. * Ao * fsysr * WorkVar3
Aswst = WorkVar1 / WorkVar2
IF (Aswst < 0.) THEN Aswst = 0.
Asvtotl = 0.5 * Aswsv + Aswst
IF (Asvtotl > Asvmin) THEN
Asvmin$ = ^OK (Asvtotl > Asvmin)
ELSE
Asvmin$ = ?Insufficient transverse RF
END IF
!7f Longituidinal reinforcement on flexural tension side (Cl 8.2.7)
WorkVar1 = Vdesign * 1E3 - 0.5 * Os * 1E3 * Vus
WorkVar2 = 0.45 * Tdesign * 1E6 * uh / (2.*Ao)
WorkVar4 = WorkVar1*WorkVar1 + WorkVar2*WorkVar2
deltaFtd = WorkVar4^0.5 * WorkVar3 * 1E-3
DesignFt = deltaFtd / Os
AbarsFt = 0.
LOOP i = 11,20 ! Loop 11->20 to include only special bars
WorkVar1 = Arfi
IF (Dprfi > Dcb) AbarsFt = AbarsFt + WorkVar1 ! Area of extra non-ps bars in tension zone
END LOOP
ActualFt = 1E-3 * fsysr * AbarsFt
IF (ActualFt = DesignFt) THEN AsNote1$ = ^OK (DesignFt <= ActualFt)
IF (ActualFt > DesignFt) THEN
AsNote1$ = ^OK (DesignFt <= ActualFt)
ELSE
AsNote1$ = ?Insufficient long. tensile reinforcement (DesignFt > ActualFt)
END IF
!7g Longitudinal reinforcement on flexural compression side (Cl 8.2.8)
Fclong = deltaFtd
Fc = Fsteel
incFcd = Fclong - Fc
IF (incFcd < 0.) THEN
AsNote2$ = ^incFcd < 0 - No additional longitudinal compression RF required
ELSE
AsNote2$ = ?incFcd > 0 - Additional longitudinal compression RF required
END IF
AbarsFc = 0.
LOOP i = 11,20
WorkVar1 = Arfi
IF (Dprfi < Dcb) AbarsFc = AbarsFc + WorkVar1 ! Area of non-PS bars in compression zone
END LOOP
ActualFc = 1E-3 * fsysr * AbarsFc
IF (ActualFc = incFcd) THEN AsNote3$ = ^Additional longitudinal compression RF OK
IF (ActualFc > incFcd) THEN
AsNote3$ = ^Additional longitudinal compression RF OK
ELSE
AsNote3$ = ?Insufficient longitudinal compression RF
END IF
!*******************************************************************
!
!8a DEFORMATIONS - Axial shortening and transfer hog
!
! The calculation of parameters øccsc and cu3 has been hard-coded into the PSC module.
! To view these calculations click the button on the dialog box or the button on the
! Deformations tab.
IF (Lg = 0.) THEN Lg = Span
IF (Ptm = 0.) Ptm = Pt
Xe = Ptm*Lg*1E6/(Ag*Egmt) ! Elastic shortening
Xs = cu3*Lg/1000 ! Shortening due to shrinkage
øccsc = øcc
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
! The calculation of parameter øcc1 has been hard-coded into the PSC module.
! To view these calculations click the button on the dialog box or the button on the Deformations tab.
WorkVar5 = Ti ! Number of days to installation of girder
Fratio3 = f`cmi/f`cg
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
! The calculation of parameter øcc3 has been hard-coded into the PSC module.
! To view these calculations click the button on the dialog box or the button on
! the Deformations tab.
th2 = th
Fratio4 = f`cg / f`cg
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