def import_marc_dat(self, filename, stylesetting='Extended', logfile=None): imp1 = importfile_marc_dat(filename, stylesetting=stylesetting, logfile=logfile) self = imp1.add_nodes(self) self = imp1.add_elements(self)
def test_import_marcdat(): f1 = importfile_marc_dat('M:\\marcworking\\Tbeam_interface_tune\\22_elastic.dat',stylesetting='Extended') # add nodes to model model1 = f1.add_nodes(model1) # add elements to model model1 = f1.add_elements(model1)
def import_marc_dat(self, *args): # readin the marc dat file f1 = importfile_marc_dat(args[0], stylesetting=args[1]) # add nodes to model self.model = f1.add_nodes(self.model) # add elements to model self.model = f1.add_elements(self.model)
def test_import_marcdat(): f1 = importfile_marc_dat( 'M:\\marcworking\\Tbeam_interface_tune\\22_elastic.dat', stylesetting='Extended') # add nodes to model model1 = f1.add_nodes(model1) # add elements to model model1 = f1.add_elements(model1)
def process_pole_dat(model1,fullfilename,dentpercent=0.5): ''' process the pole marc dat file the node with +/-xerror will be selected to curvefit the circle center dentpercent: Percentage of the dent that shall be apply different material property ''' dentpercent = float(dentpercent) p1 = importfile_marc_dat(fullfilename,stylesetting='Extended') model1 = p1.add_nodes(model1) model1 = p1.add_elements(model1) print 'Marc mat file imported, nodes and elements only' eff_nodelist = model1.nodelist.itemlib.keys() # find min and max, based on the fact that the model is cleaned up nmax,nmin = model1.nodelist.get_maxmin() xleft = nmin[0] xright = nmax[0] xerror = 1 print 'edge detected, xleft:%s xright:%s' % (str(xleft), str(xright)) # find the nodes at left and right ends and curve fit to get the center leftnodes = model1.nodelist.select_node_coord(rx=[xleft-xerror,xleft+xerror]) rightnodes = model1.nodelist.select_node_coord(rx=[xright-xerror,xright+xerror]) model1.nodeset('surface_leftend',{'nodelist':leftnodes}) model1.nodeset('surface_rightend',{'nodelist':rightnodes}) # find the center of circle at edges r1,rd1 = find_circlecenter(model1,leftnodes) r2,rd2 = find_circlecenter(model1,rightnodes) rdist = r2[0] - r1[0] print 'Center found, r1:%s r2:%s' % (str(r1), str(r2)) nrefnode = model1.node([r1,r2]) nodeid_leftcenter = nrefnode + 1 nodeid_rightcenter = nrefnode + 2 model1.nodeset('left_center',{'nodelist':[nodeid_leftcenter]}) model1.nodeset('right_center',{'nodelist':[nodeid_rightcenter]}) print 'Center reference nodes added' # adjust the node coordinates model1.nodelist.transform(dx=-r1[0],dy=-r1[1],dz=-r1[2]) ang = Find_angle(r1,r2,axis='x') model1.nodelist.transform(rx=ang[0],ry=ang[1],rz=ang[2]) r1 = [0,0,0] r2 = [rdist,0,0] print 'Model trasnformed to x center' # find the deepest node mindist = 1e10 point = None dent_dict = {} for node in eff_nodelist: xyz = model1.nodelist.itemlib[node].xyz dist = DistancePointLine(r1,r2,xyz) dent_dict[node] = dist if dist < mindist: mindist = dist point = node print 'Deepest dent found %s @ node %s' % (str(mindist),str(point)) # search for dent_node_set dent_nodes_set = [] # calculate the direction cosine of the node P = model1.nodelist.itemlib[point].xyz TP,ud,dd = UdirectionPointLine(r1,r2,P) dent_map = [] for nodes in eff_nodelist: Q = model1.nodelist.itemlib[nodes].xyz distdent = Parameter(r1,r2,rd1,rd2,P,Q) dent_map.append(distdent) if distdent[3] > mindist * dentpercent/100.0: dent_nodes_set.append(nodes) model1.dent_map = np.asarray(dent_map) model1.nodeset('dent_nodes_sets',{'nodelist':dent_nodes_set}) print 'Found total %s nodes for %s%% dent limits' % (str(len(dent_nodes_set)),str(dentpercent)) # convert the model to demand coordinate system model1.nodelist.shift_coord(shx=-TP[0],shy=-TP[1],shz=-TP[2]) model1.nodelist.transform(rx=-np.arctan(ud[2]/ud[1])) print 'Model adjust to the upright position' Allelements = list(model1.connlist.itemlib.keys()) model1.elemset('surface_elements',{'elemlist':Allelements}) dentelemlist = model1.select_elements_nodeset('dent_nodes_sets') model1.elemset('dentelems',{'elemlist':dentelemlist}) print "Element set Created: %s # 'Full Surface' and %s # 'dentelems'" % (len(Allelements),len(dentelemlist)) return model1
def process_pole_dat(model1, fullfilename, dentpercent=0.5): ''' process the pole marc dat file the node with +/-xerror will be selected to curvefit the circle center dentpercent: Percentage of the dent that shall be apply different material property ''' dentpercent = float(dentpercent) p1 = importfile_marc_dat(fullfilename, stylesetting='Extended') model1 = p1.add_nodes(model1) model1 = p1.add_elements(model1) print 'Marc mat file imported, nodes and elements only' eff_nodelist = model1.nodelist.itemlib.keys() # find min and max, based on the fact that the model is cleaned up nmax, nmin = model1.nodelist.get_maxmin() xleft = nmin[0] xright = nmax[0] xerror = 1 print 'edge detected, xleft:%s xright:%s' % (str(xleft), str(xright)) # find the nodes at left and right ends and curve fit to get the center leftnodes = model1.nodelist.select_node_coord( rx=[xleft - xerror, xleft + xerror]) rightnodes = model1.nodelist.select_node_coord( rx=[xright - xerror, xright + xerror]) model1.nodeset('surface_leftend', {'nodelist': leftnodes}) model1.nodeset('surface_rightend', {'nodelist': rightnodes}) # find the center of circle at edges r1, rd1 = find_circlecenter(model1, leftnodes) r2, rd2 = find_circlecenter(model1, rightnodes) rdist = r2[0] - r1[0] print 'Center found, r1:%s r2:%s' % (str(r1), str(r2)) nrefnode = model1.node([r1, r2]) nodeid_leftcenter = nrefnode + 1 nodeid_rightcenter = nrefnode + 2 model1.nodeset('left_center', {'nodelist': [nodeid_leftcenter]}) model1.nodeset('right_center', {'nodelist': [nodeid_rightcenter]}) print 'Center reference nodes added' # adjust the node coordinates model1.nodelist.transform(dx=-r1[0], dy=-r1[1], dz=-r1[2]) ang = Find_angle(r1, r2, axis='x') model1.nodelist.transform(rx=ang[0], ry=ang[1], rz=ang[2]) r1 = [0, 0, 0] r2 = [rdist, 0, 0] print 'Model trasnformed to x center' # find the deepest node mindist = 1e10 point = None dent_dict = {} for node in eff_nodelist: xyz = model1.nodelist.itemlib[node].xyz dist = DistancePointLine(r1, r2, xyz) dent_dict[node] = dist if dist < mindist: mindist = dist point = node print 'Deepest dent found %s @ node %s' % (str(mindist), str(point)) # search for dent_node_set dent_nodes_set = [] # calculate the direction cosine of the node P = model1.nodelist.itemlib[point].xyz TP, ud, dd = UdirectionPointLine(r1, r2, P) dent_map = [] for nodes in eff_nodelist: Q = model1.nodelist.itemlib[nodes].xyz distdent = Parameter(r1, r2, rd1, rd2, P, Q) dent_map.append(distdent) if distdent[3] > mindist * dentpercent / 100.0: dent_nodes_set.append(nodes) model1.dent_map = np.asarray(dent_map) model1.nodeset('dent_nodes_sets', {'nodelist': dent_nodes_set}) print 'Found total %s nodes for %s%% dent limits' % (str( len(dent_nodes_set)), str(dentpercent)) # convert the model to demand coordinate system model1.nodelist.shift_coord(shx=-TP[0], shy=-TP[1], shz=-TP[2]) model1.nodelist.transform(rx=-np.arctan(ud[2] / ud[1])) print 'Model adjust to the upright position' Allelements = list(model1.connlist.itemlib.keys()) model1.elemset('surface_elements', {'elemlist': Allelements}) dentelemlist = model1.select_elements_nodeset('dent_nodes_sets') model1.elemset('dentelems', {'elemlist': dentelemlist}) print "Element set Created: %s # 'Full Surface' and %s # 'dentelems'" % ( len(Allelements), len(dentelemlist)) return model1
def import_marc_dat(self,filename,stylesetting='Extended',logfile=None): imp1 = importfile_marc_dat(filename,stylesetting=stylesetting,logfile=logfile) self = imp1.add_nodes(self) self = imp1.add_elements(self)