Implementing Calculix binding
This commit is contained in:
parent
6f2f417976
commit
9c8df98c9f
|
@ -113,15 +113,19 @@ def readResult(frd_input) :
|
|||
return {'Nodes':nodes,'Tet10Elem':elements,'Displacement':disp,'Stress':stress}
|
||||
|
||||
|
||||
def importFrd(filename):
|
||||
def importFrd(filename,Analysis=None):
|
||||
m = readResult(filename);
|
||||
MeshObject = None
|
||||
if(len(m) > 0):
|
||||
import Fem
|
||||
AnalysisName = os.path.splitext(os.path.basename(filename))[0]
|
||||
AnalysisObject = FreeCAD.ActiveDocument.addObject('Fem::FemAnalysis','Analysis')
|
||||
AnalysisObject.Label = AnalysisName
|
||||
if(m.has_key('Tet10Elem') and m.has_key('Nodes') ):
|
||||
if Analysis == None:
|
||||
AnalysisName = os.path.splitext(os.path.basename(filename))[0]
|
||||
AnalysisObject = FreeCAD.ActiveDocument.addObject('Fem::FemAnalysis','Analysis')
|
||||
AnalysisObject.Label = AnalysisName
|
||||
else:
|
||||
AnalysisObject = Analysis
|
||||
|
||||
if(m.has_key('Tet10Elem') and m.has_key('Nodes') and not Analysis ):
|
||||
mesh = Fem.FemMesh()
|
||||
nds = m['Nodes']
|
||||
for i in nds:
|
||||
|
@ -131,34 +135,36 @@ def importFrd(filename):
|
|||
for i in elms:
|
||||
e = elms[i]
|
||||
mesh.addVolume([e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9]],i)
|
||||
|
||||
MeshObject = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject','ResultMesh')
|
||||
MeshObject.FemMesh = mesh
|
||||
AnalysisObject.Member = AnalysisObject.Member + [MeshObject]
|
||||
if len(nds) > 0:
|
||||
MeshObject = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject','ResultMesh')
|
||||
MeshObject.FemMesh = mesh
|
||||
AnalysisObject.Member = AnalysisObject.Member + [MeshObject]
|
||||
|
||||
if(m.has_key('Displacement')):
|
||||
disp = m['Displacement']
|
||||
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultVector','Displacement')
|
||||
o.Values = disp.values()
|
||||
o.DataType = 'Displacement'
|
||||
o.ElementNumbers = disp.keys()
|
||||
if(MeshObject):
|
||||
o.Mesh = MeshObject
|
||||
AnalysisObject.Member = AnalysisObject.Member + [o]
|
||||
if len(disp)>0:
|
||||
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultVector','Displacement')
|
||||
o.Values = disp.values()
|
||||
o.DataType = 'Displacement'
|
||||
o.ElementNumbers = disp.keys()
|
||||
if(MeshObject):
|
||||
o.Mesh = MeshObject
|
||||
AnalysisObject.Member = AnalysisObject.Member + [o]
|
||||
if(m.has_key('Stress')):
|
||||
stress = m['Stress']
|
||||
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultValue','MisesStress')
|
||||
mstress = []
|
||||
for i in stress.values():
|
||||
# van mises stress (http://en.wikipedia.org/wiki/Von_Mises_yield_criterion)
|
||||
mstress.append( sqrt( pow( i[0] - i[1] ,2) + pow( i[1] - i[2] ,2) + pow( i[2] - i[0] ,2) + 6 * (pow(i[3],2)+pow(i[4],2)+pow(i[5],2) ) ) )
|
||||
|
||||
o.Values = mstress
|
||||
o.DataType = 'VanMisesStress'
|
||||
o.ElementNumbers = stress.keys()
|
||||
if(MeshObject):
|
||||
o.Mesh = MeshObject
|
||||
AnalysisObject.Member = AnalysisObject.Member + [o]
|
||||
if len(stress)>0:
|
||||
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultValue','MisesStress')
|
||||
mstress = []
|
||||
for i in stress.values():
|
||||
# van mises stress (http://en.wikipedia.org/wiki/Von_Mises_yield_criterion)
|
||||
mstress.append( sqrt( pow( i[0] - i[1] ,2) + pow( i[1] - i[2] ,2) + pow( i[2] - i[0] ,2) + 6 * (pow(i[3],2)+pow(i[4],2)+pow(i[5],2) ) ) )
|
||||
|
||||
o.Values = mstress
|
||||
o.DataType = 'VanMisesStress'
|
||||
o.ElementNumbers = stress.keys()
|
||||
if(MeshObject):
|
||||
o.Mesh = MeshObject
|
||||
AnalysisObject.Member = AnalysisObject.Member + [o]
|
||||
if(FreeCAD.GuiUp):
|
||||
import FemGui, FreeCADGui
|
||||
if FreeCADGui.activeWorkbench().name() != 'FemWorkbench':
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD, Fem, FemLib
|
||||
import FreeCAD, Fem, FemLib, CalculixLib
|
||||
import os,sys,string,math,shutil,glob,subprocess,tempfile
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
|
@ -188,7 +188,7 @@ class _ViewProviderFemAnalysis:
|
|||
|
||||
def doubleClicked(self,vobj):
|
||||
import FemGui
|
||||
if FemGui.getActiveAnalysis() == None:
|
||||
if not FemGui.getActiveAnalysis() == self.Object:
|
||||
if FreeCADGui.activeWorkbench().name() != 'FemWorkbench':
|
||||
FreeCADGui.activateWorkbench("FemWorkbench")
|
||||
FemGui.setActiveAnalysis(self.Object)
|
||||
|
@ -366,29 +366,22 @@ class _JobControlTaskPanel:
|
|||
inpfile.write('S \n')
|
||||
inpfile.write('*END STEP \n')
|
||||
|
||||
# run Claculix
|
||||
import subprocess,FreeCADGui
|
||||
#FreeCADGui.updateGui()
|
||||
#p1 = subprocess.Popen(['C:/Tools/Calculix4Win/c4w/programs/ccx/ccx.exe', '-i','c:/users/jriegel/appdata/local/temp/Pocket_Mesh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
#ret = None
|
||||
#while ret == None:
|
||||
# print p1.communicate()
|
||||
# FreeCADGui.updateGui()
|
||||
# ret = p1.poll()
|
||||
|
||||
#*MATERIAL, Name=steel
|
||||
#*ELASTIC
|
||||
#28000000, 0.3
|
||||
#*SOLID SECTION, Elset=Eall, Material=steel
|
||||
#*STEP
|
||||
#*STATIC
|
||||
#*BOUNDARY
|
||||
#Nfix1,3,3,0
|
||||
#Nfix2,2,3,0
|
||||
#Nfix3,1,3,0
|
||||
#*DLOAD
|
||||
#*INCLUDE, INPUT=load.dlo
|
||||
#*NODE FILE
|
||||
#U
|
||||
#*EL FILE
|
||||
#S, E
|
||||
#*END STEP
|
||||
#current_file_name
|
||||
|
||||
#young_modulus = float(matmap['FEM_youngsmodulus'])
|
||||
#poisson_ratio = float(matmap['FEM_poissonratio'])
|
||||
|
||||
ret = subprocess.call(['C:/Tools/Calculix4Win/c4w/programs/ccx/ccx.exe', '-i','c:/users/jriegel/appdata/local/temp/Pocket_Mesh'],shell=True)
|
||||
print "Calculix terminated with code:" , str(ret)
|
||||
print "Read Result:"
|
||||
#FreeCADGui.updateGui()
|
||||
|
||||
CalculixLib.importFrd('c:/users/jriegel/appdata/local/temp/Pocket_Mesh.frd',FemGui.getActiveAnalysis() )
|
||||
|
||||
class _ResultControlTaskPanel:
|
||||
'''The control for the displacement post-processing'''
|
||||
|
|
Loading…
Reference in New Issue
Block a user