FEM: Replace invalid ElementNumbers with NodeNumbers
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
parent
a85c68aa65
commit
d025f1e109
|
@ -37,7 +37,7 @@ PROPERTY_SOURCE(Fem::FemResultObject, App::DocumentObject)
|
||||||
|
|
||||||
FemResultObject::FemResultObject()
|
FemResultObject::FemResultObject()
|
||||||
{
|
{
|
||||||
ADD_PROPERTY_TYPE(ElementNumbers,(0), "Data",Prop_None,"Numbers of the result elements");
|
ADD_PROPERTY_TYPE(NodeNumbers,(0), "Data",Prop_None,"Numbers of the result nodes");
|
||||||
ADD_PROPERTY_TYPE(Stats,(0), "Fem",Prop_None,"Statistics of the results");
|
ADD_PROPERTY_TYPE(Stats,(0), "Fem",Prop_None,"Statistics of the results");
|
||||||
ADD_PROPERTY_TYPE(DisplacementVectors,(), "Fem",Prop_None,"List of displacement vectors");
|
ADD_PROPERTY_TYPE(DisplacementVectors,(), "Fem",Prop_None,"List of displacement vectors");
|
||||||
ADD_PROPERTY_TYPE(DisplacementLengths,(0), "Fem",Prop_None,"List of displacement lengths");
|
ADD_PROPERTY_TYPE(DisplacementLengths,(0), "Fem",Prop_None,"List of displacement lengths");
|
||||||
|
|
|
@ -42,7 +42,7 @@ public:
|
||||||
FemResultObject(void);
|
FemResultObject(void);
|
||||||
virtual ~FemResultObject();
|
virtual ~FemResultObject();
|
||||||
|
|
||||||
App::PropertyIntegerList ElementNumbers;
|
App::PropertyIntegerList NodeNumbers;
|
||||||
/// Link to the corresponding mesh
|
/// Link to the corresponding mesh
|
||||||
App::PropertyLink Mesh;
|
App::PropertyLink Mesh;
|
||||||
/// Stats of analysis
|
/// Stats of analysis
|
||||||
|
|
|
@ -134,10 +134,10 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
||||||
filtered_values.append(v)
|
filtered_values.append(v)
|
||||||
else:
|
else:
|
||||||
filtered_values = values
|
filtered_values = values
|
||||||
self.mesh.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, filtered_values)
|
self.mesh.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, filtered_values)
|
||||||
|
|
||||||
def show_displacement(self, displacement_factor=0.0):
|
def show_displacement(self, displacement_factor=0.0):
|
||||||
self.mesh.ViewObject.setNodeDisplacementByVectors(self.result_object.ElementNumbers,
|
self.mesh.ViewObject.setNodeDisplacementByVectors(self.result_object.NodeNumbers,
|
||||||
self.result_object.DisplacementVectors)
|
self.result_object.DisplacementVectors)
|
||||||
self.mesh.ViewObject.applyDisplacement(displacement_factor)
|
self.mesh.ViewObject.applyDisplacement(displacement_factor)
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ class _ResultControlTaskPanel:
|
||||||
FreeCAD.FEM_dialog["results_type"] = "Sabs"
|
FreeCAD.FEM_dialog["results_type"] = "Sabs"
|
||||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||||
if self.suitable_results:
|
if self.suitable_results:
|
||||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, self.result_object.StressValues)
|
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, self.result_object.StressValues)
|
||||||
(minm, avg, maxm) = self.get_result_stats("Sabs")
|
(minm, avg, maxm) = self.get_result_stats("Sabs")
|
||||||
self.set_result_stats("MPa", minm, avg, maxm)
|
self.set_result_stats("MPa", minm, avg, maxm)
|
||||||
QtGui.qApp.restoreOverrideCursor()
|
QtGui.qApp.restoreOverrideCursor()
|
||||||
|
@ -145,13 +145,13 @@ class _ResultControlTaskPanel:
|
||||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||||
if disp_type == "Uabs":
|
if disp_type == "Uabs":
|
||||||
if self.suitable_results:
|
if self.suitable_results:
|
||||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, self.result_object.DisplacementLengths)
|
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, self.result_object.DisplacementLengths)
|
||||||
else:
|
else:
|
||||||
match = {"U1": 0, "U2": 1, "U3": 2}
|
match = {"U1": 0, "U2": 1, "U3": 2}
|
||||||
d = zip(*self.result_object.DisplacementVectors)
|
d = zip(*self.result_object.DisplacementVectors)
|
||||||
displacements = list(d[match[disp_type]])
|
displacements = list(d[match[disp_type]])
|
||||||
if self.suitable_results:
|
if self.suitable_results:
|
||||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, displacements)
|
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, displacements)
|
||||||
(minm, avg, maxm) = self.get_result_stats(disp_type)
|
(minm, avg, maxm) = self.get_result_stats(disp_type)
|
||||||
self.set_result_stats("mm", minm, avg, maxm)
|
self.set_result_stats("mm", minm, avg, maxm)
|
||||||
QtGui.qApp.restoreOverrideCursor()
|
QtGui.qApp.restoreOverrideCursor()
|
||||||
|
@ -180,7 +180,7 @@ class _ResultControlTaskPanel:
|
||||||
self.update_displacement()
|
self.update_displacement()
|
||||||
FreeCAD.FEM_dialog["result_object"] = self.result_object
|
FreeCAD.FEM_dialog["result_object"] = self.result_object
|
||||||
if self.suitable_results:
|
if self.suitable_results:
|
||||||
self.MeshObject.ViewObject.setNodeDisplacementByVectors(self.result_object.ElementNumbers, self.result_object.DisplacementVectors)
|
self.MeshObject.ViewObject.setNodeDisplacementByVectors(self.result_object.NodeNumbers, self.result_object.DisplacementVectors)
|
||||||
self.update_displacement()
|
self.update_displacement()
|
||||||
QtGui.qApp.restoreOverrideCursor()
|
QtGui.qApp.restoreOverrideCursor()
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ class _ResultControlTaskPanel:
|
||||||
|
|
||||||
self.suitable_results = False
|
self.suitable_results = False
|
||||||
if self.result_object:
|
if self.result_object:
|
||||||
if self.MeshObject.FemMesh.NodeCount == len(self.result_object.ElementNumbers):
|
if self.MeshObject.FemMesh.NodeCount == len(self.result_object.NodeNumbers):
|
||||||
self.suitable_results = True
|
self.suitable_results = True
|
||||||
else:
|
else:
|
||||||
if not self.MeshObject.FemMesh.VolumeCount:
|
if not self.MeshObject.FemMesh.VolumeCount:
|
||||||
|
|
|
@ -214,7 +214,7 @@ def importFrd(filename, Analysis=None):
|
||||||
|
|
||||||
if len(disp) > 0:
|
if len(disp) > 0:
|
||||||
results.DisplacementVectors = map((lambda x: x * scale), disp.values())
|
results.DisplacementVectors = map((lambda x: x * scale), disp.values())
|
||||||
results.ElementNumbers = disp.keys()
|
results.NodeNumbers = disp.keys()
|
||||||
if(MeshObject):
|
if(MeshObject):
|
||||||
results.Mesh = MeshObject
|
results.Mesh = MeshObject
|
||||||
|
|
||||||
|
@ -231,10 +231,10 @@ def importFrd(filename, Analysis=None):
|
||||||
else:
|
else:
|
||||||
results.StressValues = mstress
|
results.StressValues = mstress
|
||||||
|
|
||||||
if (results.ElementNumbers != 0 and results.ElementNumbers != stress.keys()):
|
if (results.NodeNumbers != 0 and results.NodeNumbers != stress.keys()):
|
||||||
print ("Inconsistent FEM results: element number for Stress doesn't equal element number for Displacement {} != {}"
|
print ("Inconsistent FEM results: element number for Stress doesn't equal element number for Displacement {} != {}"
|
||||||
.format(results.ElementNumbers, len(results.StressValues)))
|
.format(results.NodeNumbers, len(results.StressValues)))
|
||||||
results.ElementNumbers = stress.keys()
|
results.NodeNumbers = stress.keys()
|
||||||
|
|
||||||
x_min, y_min, z_min = map(min, zip(*displacement))
|
x_min, y_min, z_min = map(min, zip(*displacement))
|
||||||
sum_list = map(sum, zip(*displacement))
|
sum_list = map(sum, zip(*displacement))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user