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