Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Source: https://www.youtube.com/watch?v=RmsM2JZNT7g
- # Place file in C:\Program Files\ANSYS Inc\v172\Addins\ACT\extensions\vtk
- import os
- import sys
- #import myUtils
- import ansys
- import collections
- nodeIdsResult = {}
- def createwriteresult(analysis):
- analysis.CreateResultObject("writeresult")
- def call_write_evaluate(result,stepinfo,collector):
- #if int(stepinfo.Set)==int(result.Properties["step"].Value):
- dirName=result.Analysis.WorkingDir
- f=open(dirName+"/makeresult.mac","w")
- f.write("esel,none \n")
- i0=-1000
- i1=-1000
- i2=-1000
- for i in collector.Ids:
- ii=int(str(i))
- if i0==-1000:
- i0=ii-1
- i1=ii
- i2=ii
- if ii==i0+1:
- i2=ii
- else:
- f.write("esel,a,ELEM,,"+str(i1)+","+str(i0)+" \n")
- i1=ii
- i0=ii
- f.write("esel,a,ELEM,,"+str(i1)+","+str(i0)+" \n")
- f.write("nsle,s,CORNER \n")
- f.write("/post1 \n")
- f.write("set,"+str(int(stepinfo.Set))+" \n")
- f.write("*get,e_cou,ELEM,,count \n")
- f.write("*get,e_min,ELEM,,num,min \n")
- f.write("*dim,mynodes,array,20 \n")
- f.write("elem=e_min \n")
- f.write("*cfopen,myresult,txt \n")
- f.write("*do,i,1,e_cou \n")
- f.write(" ne_num=0 \n")
- f.write(" *do,j,1,20 \n")
- f.write(" mynodes(j)=nelem(elem,j) \n")
- f.write(" *if,mynodes(j),NE,0,THEN \n")
- f.write(" ne_num=ne_num+1 \n")
- f.write(" *endif \n")
- f.write(" *enddo \n")
- f.write(" *dim,myresults,array,ne_num \n")
- f.write(" *do,j,1,ne_num \n")
- f.write(" *get,myresults(j),NODE,mynodes(j),"+result.Properties["get"].Value+" \n")
- f.write(" *enddo \n")
- f.write(" *vwrite,chrval(elem) \n")
- f.write("(A9) \n")
- f.write(" *vwrite,chrval(ne_num) \n")
- f.write("(A9) \n")
- f.write(" *vwrite,myresults(1) \n")
- f.write("(E10.3) \n")
- f.write(" elem=elnext(elem) \n")
- f.write(" *del,myresults \n")
- f.write("*enddo \n")
- f.write("*cfclose \n")
- f.close()
- dirName=result.Analysis.WorkingDir
- cmdstring=" -b -i makeresult.mac -o makeresult.out /minimise"
- ansys.RunANSYS(ExtAPI,cmdstring,runDir=dirName,exelocation=None)
- f=open(dirName+"/myresult.txt","r")
- dict={}
- line=f.readline()
- while line:
- elem=int(line)
- line=f.readline()
- ne_num=int(line)
- res=[]
- for i in range(1,ne_num+1):
- line=f.readline()
- res.append(float(line))
- dict[str(elem)]=res
- line=f.readline()
- f.close()
- nodes={}
- mesh=result.Analysis.MeshData
- for elementId in collector.Ids:
- element=mesh.ElementById(elementId)
- nodeIds=element.CornerNodeIds
- values=dict[str(elementId)]
- counter=0
- for node in nodeIds:
- if (node in nodes):
- pass
- else:
- nodes[int(node)]=values[counter]
- counter=counter+1
- collector.SetValues(elementId,values)
- f=open(result.Properties["vtkfile"].Value,"w")
- f.write('# vtk DataFile Version 2.0 \n')
- f.write('Unstructured Grid \n')
- f.write('ASCII \n')
- f.write('DATASET UNSTRUCTURED_GRID \n')
- n_cou=len(nodes)
- e_cou=len(collector.Ids)
- edge_cou=0
- for elemId in collector.Ids:
- elem=mesh.ElementById(elemId)
- edge_cou=edge_cou+len(elem.CornerNodes)+1
- ExtAPI.Log.WriteMessage("n_cou: "+str(n_cou))
- ExtAPI.Log.WriteMessage("e_cou: "+str(e_cou))
- ExtAPI.Log.WriteMessage("edge_cou: "+str(edge_cou))
- f.write('POINTS '+str(n_cou)+'float \n')
- analysis=result.Analysis
- address={}
- counter=0
- for nodeId in nodes:
- node=mesh.NodeById(int(nodeId))
- try:
- if int(address[str(node)])>=0:
- ExtAPI.Log.WriteMessage("address[str(node)]: "+address[str(node)])
- except:
- address[str(node.Id)]=str(counter)
- counter=counter+1
- nx=node.X
- ny=node.Y
- nz=node.Z
- try:
- f.write(str(nx)+" "+str(ny)+" "+str(nz)+" \n")
- except:
- continue
- etyp={'kBeam3':'3','kBeam4':'3','kHex20':'12','kHex8':'12','kLine2':'3','kLine3':'3','kPoint0':'1','kPyramid13':'14','kPyramid5':'14','kQuad4':'9','kQuad8':'9','kTet10':'10','kTet4':'10','kTri3':'5','kTri6':'5','kUnknown':'0','kWedge15':'1','kWedge6':'13'}
- f.write("CELLS "+str(e_cou)+" "+str(edge_cou)+" \n")
- for elemId in collector.Ids:
- elem=mesh.ElementById(elemId)
- f.write(str(len(elem.CornerNodes))+" ")
- translate=''
- for i in range(1,len(elem.CornerNodes)+1):
- try:
- translate=translate+address[str(elem.CornerNodes[i-1].Id)]+" "
- except:
- ExtAPI.Log.WriteMessage("Error in translation on str(elem.CornerNodes[i-1].Id): "+str(elem.CornerNodes[i-1].Id))
- f.write(translate+"\n")
- f.write("CELL_TYPES "+str(e_cou)+"\n")
- for elemId in collector.Ids:
- elem=mesh.ElementById(elemId)
- f.write(etyp[str(elem.Type)]+"\n")
- resultname=result.Caption
- resultname=resultname.replace(" ","_")
- f.write("POINT_DATA "+str(n_cou)+" \n")
- f.write("SCALARS "+resultname+" float 1 \n")
- f.write("LOOKUP_TABLE default \n")
- for nodeId in nodes:
- value=nodes[nodeId]
- f.write(str(value)+" \n")
- f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement