Skip to content

Commit

Permalink
FEM: Add AnalysisStats object
Browse files Browse the repository at this point in the history
This commit add a new object to Analysis: AnalysisStats. AnalysisStats
contains list with 15 values (an example):
-0.000776373	<-- minimum X displacement
-7.74494e-06	<-- average X displacement
0.000774115	<-- maximum X displacement
-0.00416267	<-- minimum Y displacement
-0.00204191	<-- average Y displacement
0		<-- maximum Y displacement
-0.000775108	<-- minimum Z displacement
1.09288e-05	<-- average Z displacement
0.000775122	<-- maximum Z displacement
0		<-- minimum Abs displacement
0.00214509	<-- average Abs displacement
0.00430481	<-- maximum Abs displacement
0.390598	<-- minimum Von Mises Stress
0.93509		<-- average Von Mises Stress
1.47765		<-- maximum Von Mises Stress

Those values will be used to set field values in FEM results dialog
instead of currently used values returned by setNodeColorByResult
function.

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
  • Loading branch information
PrzemoF committed Jun 2, 2015
1 parent 9c6ee0a commit 597c9b8
Showing 1 changed file with 30 additions and 1 deletion.
31 changes: 30 additions & 1 deletion src/Mod/Fem/ccxFrdReader.py
Expand Up @@ -34,6 +34,10 @@
pyopen = open # because we'll redefine open below


displacement = []
mstress = []


# read a calculix result file and extract the nodes, displacement vectores and stress values.
def readResult(frd_input):
frd_file = pyopen(frd_input, "r")
Expand Down Expand Up @@ -90,6 +94,7 @@ def readResult(frd_input):
disp_y = float(line[25:37])
disp_z = float(line[37:49])
disp[elem] = FreeCAD.Vector(disp_x, disp_y, disp_z)
displacement.append((disp_x, disp_y, disp_z))
if line[5:11] == "STRESS":
stress_found = True
#we found a displacement line in the frd file
Expand Down Expand Up @@ -157,7 +162,6 @@ def importFrd(filename, Analysis=None):
stress = m['Stress']
if len(stress) > 0:
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultValue', 'MisesStress')
mstress = []
for i in stress.values():
# Von mises stress (http://en.wikipedia.org/wiki/Von_Mises_yield_criterion)
s11 = i[0]
Expand All @@ -178,6 +182,31 @@ def importFrd(filename, Analysis=None):
if(MeshObject):
o.Mesh = MeshObject
AnalysisObject.Member = AnalysisObject.Member + [o]

l = len(displacement)
x_max, y_max, z_max = map(max, zip(*displacement))
x_min, y_min, z_min = map(min, zip(*displacement))
sum_list = map(sum, zip(*displacement))
x_avg, y_avg, z_avg = [i / l for i in sum_list]
s_max = max(mstress)
s_min = min(mstress)
s_avg = sum(mstress) / l
disp_abs = []
for d in displacement:
disp_abs.append(sqrt(pow(d[0], 2) + pow(d[1], 2) + pow(d[2], 2)))
a_max = max(disp_abs)
a_min = min(disp_abs)
a_avg = sum(disp_abs) / l
stats = FreeCAD.ActiveDocument.addObject('Fem::FemResultValue', 'AnalysisStats')
stats.Values = [x_min, x_avg, x_max,
y_min, y_avg, y_max,
z_min, z_avg, z_max,
a_min, a_avg, a_max,
s_min, s_avg, s_max]
stats.DataType = 'AnalysisStats'
stats.ElementNumbers = len(stats.Values)
AnalysisObject.Member = AnalysisObject.Member + [stats]

if(FreeCAD.GuiUp):
import FemGui
import FreeCADGui
Expand Down

0 comments on commit 597c9b8

Please sign in to comment.