def calculate(self, loadProfileFromDB): '''Se ejecuta el calculo de las propiedades de la seccion. Referencia ---------- rx, ry : radio de giro del miembro | sqrt(I/A) c_i : coordenada del centroide de la seccion sc_i : coordenada del centro de corte A : Area de la seccion Cw : Constante torsional de warping de la seccion J : Constante de torsion de St. Venant Si : modulo elastico j : mitad de la constante monociclica a compresion en eje -y- (beta22-) ''' if loadProfileFromDB: try: self.load() except: loadProfileFromDB = False pass if not loadProfileFromDB: ## CALCULO PROPIEDADES A PARTIR DEL PAQUETE sectionproperties geometry = sections.CeeSection(d=self.H, b=self.B+self.r_out, l=self.r_out, t=self.t, r_out=self.r_out, n_r=8) # corto los labios y el radio p1 = geometry.add_point([self.B, 0]) p2 = geometry.add_point([self.B, self.t]) p3 = geometry.add_point([self.B, self.H]) p4 = geometry.add_point([self.B, self.H-self.t]) geometry.add_facet([p1, p2]) geometry.add_facet([p3, p4]) geometry.add_hole([self.B+self.r_out/10, self.t/2]) # add hole geometry.add_hole([self.B+self.r_out/10, self.H-self.t/2]) # add hole geometry.clean_geometry() # clean the geometry # create mesh mesh = geometry.create_mesh(mesh_sizes=[self.t/4.0]) # creo la seccion section = CrossSection(geometry, mesh) # calculo las propiedades section.calculate_geometric_properties() section.calculate_warping_properties() (self.c_x, self.c_y) = section.get_c() # centroides (self.sc_x, self.sc_y) = section.get_sc() # shear center self.Cw = section.get_gamma() # warping (self.rx, self.ry) = section.get_rc() # radios de giro self.J = section.get_j() self.A = section.get_area() self.Ae = section.get_area() (self.Ix, self.Iy, _) = section.get_ic() (self.Sx, _, _, _) = section.get_z() # modulo elastico self.j = section.get_beta_p()[3]/2.0 self.save(section) self.section = section
def calculate(self, loadProfileFromDB): '''Se ejecuta el calculo de las propiedades de la seccion. Parameters ---------- loadProfileFromDB: bool indica si se debe intentar cargar el perfil desde la base de datos Referencia ---------- rx, ry : radio de giro del miembro | sqrt(I/A) c_i : coordenada del centroide de la seccion sc_i : coordenada del centro de corte A : Area de la seccion Cw : Constante torsional de warping de la seccion J : Constante de torsion de St. Venant Si : modulo elastico j : mitad de la constante monociclica a compresion en eje -y- (beta22-) ''' if loadProfileFromDB: try: self.load() except: loadProfileFromDB = False pass if not loadProfileFromDB: ## CALCULO PROPIEDADES A PARTIR DEL PAQUETE sectionproperties geometry = sections.CeeSection(d=self.H, b=self.B, l=self.D, t=self.t, r_out=self.r_out, n_r=8) # create mesh mesh = geometry.create_mesh(mesh_sizes=[self.t/4.0]) # creo la seccion section = CrossSection(geometry, mesh) # calculo las propiedades section.calculate_geometric_properties() section.calculate_warping_properties() (self.c_x, self.c_y) = section.get_c() # centroides (self.sc_x, self.sc_y) = section.get_sc() # shear center self.Cw = section.get_gamma() # warping (self.rx, self.ry) = section.get_rc() # radios de giro self.J = section.get_j() # St Venant self.A = section.get_area() self.Ae = section.get_area() (self.Ix, self.Iy, _) = section.get_ic() (self.Sx, _, _, _) = section.get_z() # modulo elastico self.j = section.get_beta_p()[3]/2.0 self.save(section) self.section = section
def calculate(self, loadProfileFromDB): '''Se ejecuta el calculo de las propiedades de la seccion. Referencia ---------- rx, ry : radio de giro de la seccion | sqrt(I/A) ri : radio de giro en -y- de un solo perfil c c_x, c_y : coordenada del centroide de la seccion sc_x, sc_y : coordenada del centro de corte A : Area de la seccion Cw : Constante torsional de warping de la seccion J : Constante de torsion de St. Venant Si : modulo elastico j : mitad de la constante monociclica a compresion en eje -y- (beta22-) ''' if loadProfileFromDB: try: self.load() except: loadProfileFromDB = False pass if not loadProfileFromDB: c0 = c_profile(H= self.H, B= self. B, t= self.t, r_out= self.r_out) c0.calculate(loadProfileFromDB) c1 = sections.CeeSection(d=self.H, b=self.B+self.r_out, l=self.r_out, t=self.t, r_out=self.r_out, n_r=8) c2 = deepcopy(c1) # corto los labios y el radio c1 p1 = c1.add_point([self.B, 0]) p2 = c1.add_point([self.B, self.t]) p3 = c1.add_point([self.B, self.H]) p4 = c1.add_point([self.B, self.H-self.t]) c1.add_facet([p1, p2]) c1.add_facet([p3, p4]) c1.add_hole([self.B+self.r_out/10, self.t/2]) # add hole c1.add_hole([self.B+self.r_out/10, self.H-self.t/2]) # add hole c1.clean_geometry() # clean the geometry c2 = deepcopy(c1) c2.mirror_section(axis= 'y', mirror_point=[0, 0]) if self.s: c1.shift = [self.s/2, 0] c1.shift_section() c2.shift = [-self.s/2, 0] c2.shift_section() # soldadura en los extremos del alma if self.wld: h = self.wld*self.r_out # weld length a = self.wld*self.r_out*2 + self.s # base de la soldadura weld1 = sections.CustomSection( points=[[a/2,0], [-a/2, 0], [0, h]], facets=[[0,1], [1,2], [2,0]], holes=[], control_points=[[h / 3, h / 3]] ) weld2 = deepcopy(weld1) weld2.mirror_section(axis= 'x', mirror_point=[0, 0]) weld2.shift = [0, self.H] weld2.shift_section() geometry = sections.MergedSection([c1, c2, weld1, weld2]) geometry.clean_geometry(verbose= False) if self.s: geometry.add_hole([0, self.H/2]) mesh = geometry.create_mesh(mesh_sizes=[self.mesh_size, self.mesh_size, self.mesh_size, self.mesh_size]) else: geometry = sections.MergedSection([c1, c2]) geometry.clean_geometry() mesh = geometry.create_mesh(mesh_sizes=[self.mesh_size, self.mesh_size]) section = CrossSection(geometry, mesh) #mesh_c1 = c1.create_mesh(mesh_sizes=[self.mesh_size]) #section_c1 = CrossSection(c1, mesh_c1) #section_c1.calculate_geometric_properties() #section_c1.calculate_warping_properties() section.calculate_geometric_properties() section.calculate_warping_properties() (self.c_x, self.c_y) = section.get_c() # centroides (self.sc_x, self.sc_y) = section.get_sc() # shear center self.Cw = section.get_gamma() # warping (self.rx, self.ry) = section.get_rc() # radios de giro self.J = section.get_j() self.A = section.get_area() self.Ae = self.A self.ri = c0.ry # radios de giro y de c1 (self.Ix, self.Iy, _) = section.get_ic() (self.Sx, _, _, _) = section.get_z() # modulo elastico self.j = section.get_beta_p()[3]/2.0 self.save(section) self.section = section