def initControlVars(self, elements): ''' Initialize control variables over elements. :param elements: elements to define control variables in ''' for e in elements: e.setProp(self.limitStateLabel, cv.RCShearControlVars())
def check(self, elements, nmbComb): ''' Check the shear strength of the RC section. Transverse reinforcement is not taken into account yet. ''' lmsg.log("Postprocesing combination: " + nmbComb) # XXX torsional deformation ingnored. for e in elements: e.getResistingForce() scc = e.getSection() idSection = e.getProp("idSection") section = scc.getProp('sectionData') self.setSection(section) NTmp = scc.getStressResultantComponent("N") VuTmp = self.calcVu(NTmp) VyTmp = scc.getStressResultantComponent("Vy") VzTmp = scc.getStressResultantComponent("Vz") VTmp = math.sqrt((VyTmp)**2 + (VzTmp)**2) if (VuTmp != 0.0): FCtmp = abs(VTmp) / VuTmp else: FCtmp = 10 if (FCtmp >= e.getProp(self.limitStateLabel).CF): MyTmp = scc.getStressResultantComponent("My") MzTmp = scc.getStressResultantComponent("Mz") Mu = 0.0 # Not used in ACI-318 theta = None # Not used in ACI-318 e.setProp(self.limitStateLabel, cv.RCShearControlVars(idSection, nmbComb, FCtmp, NTmp, MyTmp, MzTmp, Mu, VyTmp, VzTmp, theta, self.Vc, self.Vsu, VuTmp)) # Worst cas
def check(self, elements, nmbComb): ''' Check the shear strength of the RC section. XXX Orientation of the transverse reinforcement is not taken into account. ''' print("Postprocesing combination: ", nmbComb) # XXX torsional deformation ingnored. for e in elements: e.getResistingForce() scc = e.getSection() idSection = e.getProp("idSection") section = scc.getProp("datosSecc") self.setSection(section) AsTrsv = section.shReinfY.getAs() alpha = section.shReinfY.angAlphaShReinf theta = section.shReinfY.angThetaConcrStruts VuTmp = section.getRoughVcuEstimation() NTmp = scc.getStressResultantComponent("N") MyTmp = scc.getStressResultantComponent("My") momentThreshold = VuTmp / 1000.0 if (abs(MyTmp) < momentThreshold): #bending moment too small. MyTmp = momentThreshold MzTmp = scc.getStressResultantComponent("Mz") if (abs(MzTmp) < momentThreshold): #bending moment too small. MzTmp = momentThreshold VyTmp = scc.getStressResultantComponent("Vy") if (abs(VyTmp) > VuTmp / 5.0): #We "eliminate" very small shear forces. posEsf = geom.Pos3d(NTmp, MyTmp, MzTmp) diagInt = e.getProp("diagInt") intersection = diagInt.getIntersection(posEsf) Mu = intersection.z VuTmp = self.calcVu(NTmp, MzTmp, Mu, VyTmp) #Mz associated with Vy else: #Fictitious ultimate moment. Mu = self.concrete.Ecm() * section.getIz_RClocalZax( ) * 1e-3 / section.h if (abs(MzTmp) > Mu): errMsg = 'Fictitious ultimate moment too low;' errMsg += ' Mu= ' + str(Mu) + ' MzTmp= ' + str(MzTmp) lmsg.error(errMsg) #13.02.2018 right-justified in order to be run only if VyTmp>VuTmp/5.0 if (VuTmp != 0.0): FCtmp = abs(VyTmp) / VuTmp else: FCtmp = 10 if (FCtmp >= e.getProp(self.limitStateLabel).CF): VzTmp = scc.getStressResultantComponent("Vz") e.setProp(self.limitStateLabel, cv.RCShearControlVars(idSection, nmbComb, FCtmp, NTmp, MyTmp, MzTmp, Mu, VyTmp, VzTmp, theta, self.Vcu, self.Vsu, VuTmp)) # Worst case