def getMomentCurvatureDiagram3D(preprocessor, nmbSecc, esfAxil, maxK, numIncr): ''' Return the points of the moment curvature diagram of the section. :param nmbSecc: Section name. :param esfAxil: Axial force over the section. :param maxK: Maximum curvature to reach in the analysis. :param numIncr: Number of increments. ''' nodes = preprocessor.getNodeHandler modelSpace = predefined_spaces.StructuralMechanics3D(nodes) nod1 = nodes.newNodeIDXYZ(1001, 1, 0, 0) nod2 = nodes.newNodeIDXYZ(1002, 1, 0, 0) elementos = preprocessor.getElementHandler elementos.defaultMaterial = nmbSecc elementos.defaultTag = 2001 #Tag for the next element. zls = elementos.newElement("ZeroLengthSection", xc.ID([nod1.tag, nod2.tag])) modelSpace.fixNode000_000(nod1.tag) modelSpace.constraints.newSPConstraint(nod2.tag, 1, 0.0) modelSpace.constraints.newSPConstraint(nod2.tag, 2, 0.0) cargas = preprocessor.getLoadHandler casos = cargas.getLoadPatterns #Load modulation. ts = casos.newTimeSeries("constant_ts", "ts") casos.currentTimeSeries = "ts" lp0 = casos.newLoadPattern("default", "0") lp0.newNodalLoad(nod2.tag, xc.Vector([esfAxil, 0, 0, 0, 0, 0])) #We add the load case to domain. casos.addToDomain("0") analysis = predefined_solutions.simple_newton_raphson(prueba) analOk = analysis.analyze(1) lp1 = casos.newLoadPattern("default", "1") lp1.newNodalLoad(nod2.tag, xc.Vector([0, 0, 0, 0, 0, 0, 1])) # Compute curvature increment. dK = maxK / numIncr soluMethods = prb.getSolProc.getAnalysisAggregationContainer analysisAggregation = getAnalysisAggregation("analysisAggregation") integ = analysisAggregation.newIntegrator( "displacement_control_integrator")
def getDiagMomentoCurvatura3d(preprocessor, nmbSecc, esfAxil, maxK, numIncr): ''' Función que devuelve los puntos del diagrama momento curvatura de una sección. :param nmbSecc: Nombre de la sección a analizar. :param esfAxil: Esfuerzo axil que actúa sobre la sección. :param maxK: Curvatura máxima alcanzada durante el análisis. :param numIncr: Número de incrementos en que se divide el intervalo 0->maxK. ''' nodes= preprocessor.getNodeLoader modelSpace= predefined_spaces.StructuralMechanics3D(nodes) nodes.newNodeIDXYZ(1001,1,0,0) nodes.newNodeIDXYZ(1002,1,0,0) elementos= preprocessor.getElementLoader elementos.defaultMaterial= nmbSecc elementos.defaultTag= 2001 #Tag for the next element. zls= elementos.newElement("zero_length_section",xc.ID([1001,1002])); coacciones= preprocessor.getConstraintLoader fix_node_6dof.fixNode6DOF(coacciones,1001) coacciones.newSPConstraint(1002,1,0.0) coacciones.newSPConstraint(1002,2,0.0) cargas= preprocessor.getLoadLoader casos= cargas.getLoadPatterns #Load modulation. ts= casos.newTimeSeries("constant_ts","ts") casos.currentTimeSeries= "ts" lp0= casos.newLoadPattern("default","0") lp0.newNodalLoad(1002,xc.Vector([esfAxil,0,0,0,0,0])) #We add the load case to domain. casos.addToDomain("0") analisis= predefined_solutions.simple_newton_raphson(prueba) analOk= analisis.analyze(1) lp1= casos.newLoadPattern("default","1") lp1.newNodalLoad(1002,xc.Vector([0,0,0,0,0,0,1])) # Calculamos el incremento de curvatura dK= maxK/numIncr soluMethods= prb.getSolProc.getSoluMethodContainer smt= getSoluMethod("smt") integ= smt.newIntegrator("displacement_control_integrator")
def getMomentCurvatureDiagram3D(preprocessor, nmbSecc, esfAxil, maxK, numIncr): ''' Return the points of the moment curvature diagram of the section. :param nmbSecc: Section name. :param esfAxil: Axial force over the section. :param maxK: Maximum curvature to reach in the analysis. :param numIncr: Number of increments. ''' nodes= preprocessor.getNodeHandler modelSpace= predefined_spaces.StructuralMechanics3D(nodes) nod1= nodes.newNodeIDXYZ(1001,1,0,0) nod2= nodes.newNodeIDXYZ(1002,1,0,0) elementos= preprocessor.getElementHandler elementos.defaultMaterial= nmbSecc elementos.defaultTag= 2001 #Tag for the next element. zls= elementos.newElement("ZeroLengthSection",xc.ID([nod1.tag,nod2.tag])) modelSpace.fixNode000_000(nod1.tag) modelSpace.constraints.newSPConstraint(nod2.tag,1,0.0) modelSpace.constraints.newSPConstraint(nod2.tag,2,0.0) cargas= preprocessor.getLoadHandler casos= cargas.getLoadPatterns #Load modulation. ts= casos.newTimeSeries("constant_ts","ts") casos.currentTimeSeries= "ts" lp0= casos.newLoadPattern("default","0") lp0.newNodalLoad(nod2.tag,xc.Vector([esfAxil,0,0,0,0,0])) #We add the load case to domain. casos.addToDomain("0") analysis= predefined_solutions.simple_newton_raphson(prueba) analOk= analysis.analyze(1) lp1= casos.newLoadPattern("default","1") lp1.newNodalLoad(nod2.tag,xc.Vector([0,0,0,0,0,0,1])) # Compute curvature increment. dK= maxK/numIncr soluMethods= prb.getSolProc.getAnalysisAggregationContainer analysisAggregation= getAnalysisAggregation("analysisAggregation") integ= analysisAggregation.newIntegrator("displacement_control_integrator")
loadHandler = preprocessor.getLoadHandler lPatterns = loadHandler.getLoadPatterns #Load modulation. ts = lPatterns.newTimeSeries("constant_ts", "ts") lPatterns.currentTimeSeries = "ts" #Load case definition lp0 = lPatterns.newLoadPattern("default", "0") lp0.newNodalLoad(2, xc.Vector([0, 0, 0, 0, 0, MzDato])) #We add the load case to domain. lPatterns.addToDomain("0") # Solution procedure analisis = predefined_solutions.simple_newton_raphson(feProblem) analOk = analisis.analyze(1) nodes = preprocessor.getNodeHandler nodes.calculateNodalReactions(True, 1e-7) RN = nodes.getNode(1).getReaction[0] RM = nodes.getNode(1).getReaction[5] RN2 = nodes.getNode(2).getReaction[0] elements = preprocessor.getElementHandler ele1 = elements.getElement(1) scc = ele1.getSection() esfN = scc.getFibers().getResultant() esfMy = scc.getFibers().getMy(0.0) esfMz = scc.getFibers().getMz(0.0)
cargas = preprocessor.getLoadLoader casos = cargas.getLoadPatterns #Load modulation. ts = casos.newTimeSeries("constant_ts", "ts") casos.currentTimeSeries = "ts" #Load case definition lp0 = casos.newLoadPattern("default", "0") lp0.newNodalLoad(2, xc.Vector([NDato, 0, 0, 0, MyDato, MzDato])) #We add the load case to domain. casos.addToDomain("0") # Procedimiento de solución analisis = predefined_solutions.simple_newton_raphson(prueba) analOk = analisis.analyze(10) secHAParamsFis = fisuracionEHE.CrackControl('SLS_crack') elementos = preprocessor.getElementLoader ele1 = elementos.getElement(1) scc = ele1.getSection() secHAParamsFis.calcApertCaracFis(scc, EHE_concrete.HA25.matTagK, EHE_reinforcing_steel.B400S.matTagK, EHE_concrete.HA25.fctm()) ratio1 = ((secHAParamsFis.rebarsSpacingTracc - 0.15) / 0.15) WkTeor = 0.26e-3 ratio2 = ((secHAParamsFis.Wk - WkTeor) / WkTeor) '''
lp0= lPatterns.newLoadPattern("default","0") #lPatterns.currentLoadPattern= "0" loadN= -1 loadVy= -2 loadVz= -3 loadMx= -4 loadMy= -5 loadMz= -6 lp0.newNodalLoad(2,xc.Vector([loadN,loadVy,loadVz,loadMx,loadMy,loadMz])) #We add the load case to domain. lPatterns.addToDomain("0") # Solution procedure analisis= predefined_solutions.simple_newton_raphson(feProblem) analOk= analisis.analyze(1) if(analOk!=0): print "Error!; failed to converge." exit() nodes= preprocessor.getNodeHandler nodes.calculateNodalReactions(True,1e-7) n1= nodes.getNode(1) reacN1= n1.getReaction elements= preprocessor.getElementHandler ele1= elements.getElement(1) scc= ele1.getSection() N= scc.getStressResultantComponent("N")