def log(self, strng): self.loglock.acquire() try: if debug.debug() and not self.quiet: global debugcounter if len(strng) < 1000: dstr = strng else: dstr = strng[:80] + '...' + strng[-20:] debug.msg("====%04d===="%debugcounter, dstr) debugcounter += 1 if self._loghalted == 0: self._logchanged = 1 self.logbook.append(strng+'\n') for logger in self.loggers: logger(strng) finally: self.loglock.release()
def getLine(self): line = self.file.readline() self.bytecount += len(line) debug.msg("%s: %s" % (self.filename, line[:min(len(line) - 1, 100)])) return line
def getLine(self): line = self.file.readline() self.bytecount += len(line) debug.msg("%s: %s" %(self.filename, line[:min(len(line)-1, 100)])) return line
def writeABAQUSfromSkeleton(filename, mode, skelcontext): skelcontext.begin_reading() try: skeleton = skelcontext.getObject() buffer = "*HEADING\nABAQUS-style file created by OOF2 on %s from a skeleton " % ( datetime.datetime.today()) buffer += "of the microstructure %s.\n" % skeleton.MS.name() # Build dictionary (instead of using index()) for elements and nodes # as was done in previous writeXXX() methods nodedict = {} i = 1 for node in skeleton.nodes: nodedict[node] = i i += 1 # same for elements elementdict = {} i = 1 for el in skeleton.elements: elementdict[el] = i i += 1 debug.fmsg("made dicts") # Collect elements with the same dominant material together in a # dictionary, with a key given by the material name. # Some elements may not have a material assigned and # these should not be included in the dictionary(?). Have a feeling # something like this has been done in the OOF universe. materiallist = {} elementlist = {} for el in skeleton.elements: matl = el.material(skelcontext) if matl: matname = matl.name() # Steve's suggestion elindex = elementdict[el] try: elementlist[matname].append(elindex) except KeyError: elementlist[matname] = [elindex] materiallist[matname] = el.material(skelcontext) debug.fmsg("made materiallist and elementlist") buffer += "** Materials defined by OOF2:\n" for matname, details in materiallist.items(): buffer += "** %s:\n" % (matname) for prop in details.properties(): for param in prop.registration().params: buffer += "** %s: %s\n" % (param.name, param.value) debug.fmsg("wrote materials") buffer += "** Notes:\n** The nodes for a skeleton are always located at vertices or corners.\n" buffer += "** More information may be obtained by saving ABAQUS from a mesh.\n" listbuf = ["*NODE\n"] for node in skeleton.nodes: listbuf.append( "%d, %s, %s\n" % (nodedict[node], node.position().x, node.position().y)) buffer += string.join(listbuf, "") # Only expecting 3 or 4 noded skeleton elements for numnodes in [3, 4]: listbuf=["** The element type provided for ABAQUS is only a guess " \ "and may have to be modified by the user to be meaningful.\n*ELEMENT, TYPE=CPS%d\n" % numnodes] for el in skeleton.elements: if el.nnodes() == numnodes: listbuf2 = ["%d" % (elementdict[el])] for node in el.nodes: listbuf2.append("%d" % (nodedict[node])) listbuf.append(string.join(listbuf2, ", ") + "\n") if len(listbuf) > 1: buffer += string.join(listbuf, "") debug.fmsg("wrote elements") for group in skelcontext.nodegroups.groups: buffer += "*NSET, NSET=%s\n" % (group) listbuf = [] i = 0 for node in skelcontext.nodegroups.get_group(group): if i > 0 and i % 16 == 0: listbuf.append("\n%d" % (nodedict[node])) else: listbuf.append("%d" % (nodedict[node])) i += 1 buffer += string.join(listbuf, ", ") + "\n" debug.fmsg("wrote node groups") for elgroup in skelcontext.elementgroups.groups: buffer += "*ELSET, ELSET=%s\n" % (elgroup) listbuf = [] i = 0 for el in skelcontext.elementgroups.get_group(elgroup): if i > 0 and i % 16 == 0: listbuf.append("\n%d" % (elementdict[el])) else: listbuf.append("%d" % (elementdict[el])) i += 1 buffer += string.join(listbuf, ", ") + "\n" debug.fmsg("wrote element groups") buffer += "** Include point and edge boundaries from OOF2.\n" for pbname, pbdy in skeleton.pointboundaries.items(): buffer += "*NSET, NSET=%s\n" % (pbname) listbuf = [] i = 0 for node in pbdy.nodes: if i > 0 and i % 16 == 0: listbuf.append("\n%d" % (nodedict[node])) else: listbuf.append("%d" % (nodedict[node])) i += 1 buffer += string.join(listbuf, ", ") + "\n" debug.fmsg("wrote boundaries") # Use rearrangeEdges() to chain the edges together, then pick the # unique nodes. It seems the edges can't be selected if they # are empty, so edgeset=[(a,b),(b,c),...] is not checked # for null content for ebname, ebdy in skeleton.edgeboundaries.items(): edgeset = rearrangeEdges([ tuple([nodedict[node] for node in edge.get_nodes()]) for edge in ebdy.edges ]) buffer += "*NSET, NSET=%s\n" % (ebname) listbuf = ["%d" % edgeset[0][0]] i = 1 for edge in edgeset: if i % 16 == 0: listbuf.append("\n%d" % (edge[1])) else: listbuf.append("%d" % (edge[1])) i += 1 buffer += string.join(listbuf, ", ") + "\n" for matname in materiallist: buffer += "*ELSET, ELSET=%s\n" % matname listbuf = [] i = 0 for elindex in elementlist[matname]: if i > 0 and i % 16 == 0: listbuf.append("\n%d" % (elindex)) else: listbuf.append("%d" % (elindex)) i += 1 buffer += string.join( listbuf, ", ") + "\n*SOLID SECTION, ELSET=%s, MATERIAL=%s\n" % (matname, matname) debug.fmsg("wrote material elsets") for matname in materiallist: buffer += "*MATERIAL, NAME=%s\n** Use the information in the header to complete these fields under MATERIAL\n" % matname # Save/Commit to file. Perhaps should be done outside the current method debug.fmsg("opening file") fp = open(filename, mode) debug.msg("writing buffer") fp.write(buffer) debug.fmsg("done writing buffer") fp.close() finally: skelcontext.end_reading()
def writeABAQUSfromSkeleton(filename, mode, skelcontext): skelcontext.begin_reading() try: skeleton = skelcontext.getObject() buffer="*HEADING\nABAQUS-style file created by OOF2 on %s from a skeleton " % (datetime.datetime.today()) buffer+="of the microstructure %s.\n" % skeleton.MS.name() # Build dictionary (instead of using index()) for elements and nodes # as was done in previous writeXXX() methods nodedict = {} i = 1 for node in skeleton.nodes: nodedict[node] = i i += 1 # same for elements elementdict = {} i = 1 for el in skeleton.elements: elementdict[el] = i i += 1 debug.fmsg("made dicts") # Collect elements with the same dominant material together in a # dictionary, with a key given by the material name. # Some elements may not have a material assigned and # these should not be included in the dictionary(?). Have a feeling # something like this has been done in the OOF universe. materiallist={} elementlist={} for el in skeleton.elements: matl = el.material(skelcontext) if matl: matname = matl.name() # Steve's suggestion elindex = elementdict[el] try: elementlist[matname].append(elindex) except KeyError: elementlist[matname] = [elindex] materiallist[matname] = el.material(skelcontext) debug.fmsg("made materiallist and elementlist") buffer+="** Materials defined by OOF2:\n" for matname, details in materiallist.items(): buffer+="** %s:\n" % (matname) for prop in details.properties(): for param in prop.registration().params: buffer+="** %s: %s\n" % (param.name,param.value) debug.fmsg("wrote materials") buffer+="** Notes:\n** The nodes for a skeleton are always located at vertices or corners.\n" buffer+="** More information may be obtained by saving ABAQUS from a mesh.\n" listbuf=["*NODE\n"] for node in skeleton.nodes: listbuf.append("%d, %s, %s\n" % (nodedict[node],node.position().x,node.position().y)) buffer+=string.join(listbuf,"") # Only expecting 3 or 4 noded skeleton elements for numnodes in [3,4]: listbuf=["** The element type provided for ABAQUS is only a guess " \ "and may have to be modified by the user to be meaningful.\n*ELEMENT, TYPE=CPS%d\n" % numnodes] for el in skeleton.elements: if el.nnodes()==numnodes: listbuf2=["%d" % (elementdict[el])] for node in el.nodes: listbuf2.append("%d" % (nodedict[node])) listbuf.append(string.join(listbuf2,", ")+"\n") if len(listbuf)>1: buffer+=string.join(listbuf,"") debug.fmsg("wrote elements") for group in skelcontext.nodegroups.groups: buffer+="*NSET, NSET=%s\n" % (group) listbuf=[] i=0 for node in skelcontext.nodegroups.get_group(group): if i>0 and i%16==0: listbuf.append("\n%d" % (nodedict[node])) else: listbuf.append("%d" % (nodedict[node])) i+=1 buffer+=string.join(listbuf,", ")+"\n" debug.fmsg("wrote node groups") for elgroup in skelcontext.elementgroups.groups: buffer+="*ELSET, ELSET=%s\n" % (elgroup) listbuf=[] i=0 for el in skelcontext.elementgroups.get_group(elgroup): if i>0 and i%16==0: listbuf.append("\n%d" % (elementdict[el])) else: listbuf.append("%d" % (elementdict[el])) i+=1 buffer+=string.join(listbuf,", ")+"\n" debug.fmsg("wrote element groups") buffer+="** Include point and edge boundaries from OOF2.\n" for pbname, pbdy in skeleton.pointboundaries.items(): buffer+="*NSET, NSET=%s\n" % (pbname) listbuf=[] i=0 for node in pbdy.nodes: if i>0 and i%16==0: listbuf.append("\n%d" % (nodedict[node])) else: listbuf.append("%d" % (nodedict[node])) i+=1 buffer+=string.join(listbuf,", ")+"\n" debug.fmsg("wrote boundaries") # Use rearrangeEdges() to chain the edges together, then pick the # unique nodes. It seems the edges can't be selected if they # are empty, so edgeset=[(a,b),(b,c),...] is not checked # for null content for ebname, ebdy in skeleton.edgeboundaries.items(): edgeset = rearrangeEdges([ tuple([nodedict[node] for node in edge.get_nodes()]) for edge in ebdy.edges ]) buffer+="*NSET, NSET=%s\n" % (ebname) listbuf=["%d" % edgeset[0][0]] i=1 for edge in edgeset: if i%16==0: listbuf.append("\n%d" % (edge[1])) else: listbuf.append("%d" % (edge[1])) i+=1 buffer+=string.join(listbuf,", ")+"\n" for matname in materiallist: buffer+="*ELSET, ELSET=%s\n" % matname listbuf=[] i=0 for elindex in elementlist[matname]: if i>0 and i%16==0: listbuf.append("\n%d" % (elindex)) else: listbuf.append("%d" % (elindex)) i+=1 buffer+=string.join(listbuf,", ")+"\n*SOLID SECTION, ELSET=%s, MATERIAL=%s\n" % (matname,matname) debug.fmsg("wrote material elsets") for matname in materiallist: buffer+="*MATERIAL, NAME=%s\n** Use the information in the header to complete these fields under MATERIAL\n" % matname # Save/Commit to file. Perhaps should be done outside the current method debug.fmsg("opening file") fp=open(filename,mode) debug.msg("writing buffer") fp.write(buffer) debug.fmsg("done writing buffer") fp.close() finally: skelcontext.end_reading()