Advertisement
Guest User

main.py

a guest
Dec 4th, 2018
1,229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.84 KB | None | 0 0
  1. # Source: https://www.youtube.com/watch?v=RmsM2JZNT7g
  2. # Place file in C:\Program Files\ANSYS Inc\v172\Addins\ACT\extensions\vtk
  3.  
  4. import os
  5. import sys
  6. #import myUtils
  7. import ansys
  8. import collections
  9.  
  10. nodeIdsResult = {}
  11.  
  12. def createwriteresult(analysis):
  13.     analysis.CreateResultObject("writeresult")
  14.    
  15. def call_write_evaluate(result,stepinfo,collector):
  16.     #if int(stepinfo.Set)==int(result.Properties["step"].Value):
  17.         dirName=result.Analysis.WorkingDir
  18.         f=open(dirName+"/makeresult.mac","w")
  19.         f.write("esel,none \n")
  20.         i0=-1000
  21.         i1=-1000
  22.         i2=-1000
  23.         for i in collector.Ids:
  24.             ii=int(str(i))
  25.             if i0==-1000:
  26.                 i0=ii-1
  27.                 i1=ii
  28.                 i2=ii
  29.             if ii==i0+1:
  30.                 i2=ii
  31.             else:
  32.                 f.write("esel,a,ELEM,,"+str(i1)+","+str(i0)+" \n")
  33.                 i1=ii
  34.             i0=ii
  35.         f.write("esel,a,ELEM,,"+str(i1)+","+str(i0)+" \n") 
  36.         f.write("nsle,s,CORNER \n")
  37.         f.write("/post1 \n")
  38.         f.write("set,"+str(int(stepinfo.Set))+" \n")
  39.         f.write("*get,e_cou,ELEM,,count \n")
  40.         f.write("*get,e_min,ELEM,,num,min \n")
  41.         f.write("*dim,mynodes,array,20 \n")
  42.         f.write("elem=e_min \n")
  43.         f.write("*cfopen,myresult,txt \n")
  44.         f.write("*do,i,1,e_cou \n")
  45.         f.write("   ne_num=0 \n")
  46.         f.write("   *do,j,1,20 \n")
  47.         f.write("       mynodes(j)=nelem(elem,j) \n")
  48.         f.write("       *if,mynodes(j),NE,0,THEN \n")
  49.         f.write("           ne_num=ne_num+1 \n")
  50.         f.write("       *endif \n")
  51.         f.write("   *enddo \n")
  52.         f.write("   *dim,myresults,array,ne_num \n")
  53.         f.write("   *do,j,1,ne_num \n")
  54.         f.write("       *get,myresults(j),NODE,mynodes(j),"+result.Properties["get"].Value+" \n")
  55.         f.write("   *enddo \n")
  56.         f.write("   *vwrite,chrval(elem) \n")
  57.         f.write("(A9) \n")
  58.         f.write("   *vwrite,chrval(ne_num) \n")
  59.         f.write("(A9) \n")
  60.         f.write("   *vwrite,myresults(1) \n")
  61.         f.write("(E10.3) \n")
  62.         f.write("   elem=elnext(elem) \n")
  63.         f.write("   *del,myresults \n")
  64.         f.write("*enddo \n")
  65.         f.write("*cfclose \n")
  66.         f.close()
  67.         dirName=result.Analysis.WorkingDir
  68.         cmdstring=" -b -i makeresult.mac -o makeresult.out /minimise"
  69.         ansys.RunANSYS(ExtAPI,cmdstring,runDir=dirName,exelocation=None)
  70.        
  71.        
  72.        
  73.         f=open(dirName+"/myresult.txt","r")
  74.         dict={}
  75.         line=f.readline()
  76.         while line:
  77.             elem=int(line)
  78.             line=f.readline()
  79.             ne_num=int(line)
  80.             res=[]
  81.             for i in range(1,ne_num+1):
  82.                 line=f.readline()
  83.                 res.append(float(line))
  84.             dict[str(elem)]=res
  85.             line=f.readline()
  86.         f.close()
  87.         nodes={}
  88.         mesh=result.Analysis.MeshData
  89.         for elementId in collector.Ids:
  90.             element=mesh.ElementById(elementId)
  91.             nodeIds=element.CornerNodeIds
  92.             values=dict[str(elementId)]
  93.             counter=0
  94.             for node in nodeIds:
  95.                 if (node in nodes):
  96.                     pass
  97.                 else:
  98.                     nodes[int(node)]=values[counter]
  99.                 counter=counter+1
  100.             collector.SetValues(elementId,values)
  101.        
  102.        
  103.        
  104.         f=open(result.Properties["vtkfile"].Value,"w")
  105.         f.write('# vtk DataFile Version 2.0 \n')
  106.         f.write('Unstructured Grid \n')
  107.         f.write('ASCII \n')
  108.         f.write('DATASET UNSTRUCTURED_GRID \n')
  109.        
  110.         n_cou=len(nodes)
  111.         e_cou=len(collector.Ids)
  112.         edge_cou=0
  113.         for elemId in collector.Ids:
  114.             elem=mesh.ElementById(elemId)
  115.             edge_cou=edge_cou+len(elem.CornerNodes)+1
  116.         ExtAPI.Log.WriteMessage("n_cou: "+str(n_cou))
  117.         ExtAPI.Log.WriteMessage("e_cou: "+str(e_cou))
  118.         ExtAPI.Log.WriteMessage("edge_cou: "+str(edge_cou))
  119.        
  120.         f.write('POINTS '+str(n_cou)+'float \n')
  121.         analysis=result.Analysis
  122.         address={}
  123.         counter=0
  124.         for nodeId in nodes:
  125.             node=mesh.NodeById(int(nodeId))
  126.             try:
  127.                 if int(address[str(node)])>=0:
  128.                     ExtAPI.Log.WriteMessage("address[str(node)]: "+address[str(node)])
  129.             except:
  130.                 address[str(node.Id)]=str(counter)
  131.                 counter=counter+1
  132.                 nx=node.X
  133.                 ny=node.Y
  134.                 nz=node.Z
  135.             try:
  136.                 f.write(str(nx)+" "+str(ny)+" "+str(nz)+" \n")
  137.             except:
  138.                 continue
  139.         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'}
  140.         f.write("CELLS "+str(e_cou)+" "+str(edge_cou)+" \n")
  141.         for elemId in collector.Ids:
  142.             elem=mesh.ElementById(elemId)
  143.             f.write(str(len(elem.CornerNodes))+" ")
  144.             translate=''
  145.             for i in range(1,len(elem.CornerNodes)+1):
  146.                 try:
  147.                     translate=translate+address[str(elem.CornerNodes[i-1].Id)]+" "
  148.                 except:
  149.                     ExtAPI.Log.WriteMessage("Error in translation on str(elem.CornerNodes[i-1].Id): "+str(elem.CornerNodes[i-1].Id))
  150.             f.write(translate+"\n")
  151.         f.write("CELL_TYPES "+str(e_cou)+"\n")
  152.         for elemId in collector.Ids:
  153.             elem=mesh.ElementById(elemId)
  154.             f.write(etyp[str(elem.Type)]+"\n")
  155.         resultname=result.Caption
  156.         resultname=resultname.replace(" ","_")
  157.         f.write("POINT_DATA "+str(n_cou)+" \n")
  158.         f.write("SCALARS "+resultname+" float 1 \n")
  159.         f.write("LOOKUP_TABLE default \n")
  160.         for nodeId in nodes:
  161.             value=nodes[nodeId]
  162.             f.write(str(value)+" \n")
  163.         f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement