User Defined Equations Broken (FemResults Task View)

About the development of the FEM module/workbench.

Moderator: bernd

Post Reply
UR_
Veteran
Posts: 1355
Joined: Tue Jan 03, 2017 8:42 pm

User Defined Equations Broken (FemResults Task View)

Post by UR_ »

To get some fancy user defined equations to work, I had to comment out some code first :(

User defined equation:

Screenshot 002.png
Screenshot 002.png (30.68 KiB) Viewed 735 times

out commented code from _ViewProviderFemResultMechanical.py

Code: Select all

#         rx = np.array(self.result_obj.ReinforcementRatio_x)
#         ry = np.array(self.result_obj.ReinforcementRatio_y)
#         rz = np.array(self.result_obj.ReinforcementRatio_z)
#         mc = np.array(self.result_obj.MohrCoulomb)
        # vectors
        dispvectors = np.array(self.result_obj.DisplacementVectors)
        x = np.array(dispvectors[:, 0])
        y = np.array(dispvectors[:, 1])
        z = np.array(dispvectors[:, 2])
        # If PSxVector is empty all UserDefined equation does not work
#         if self.result_obj.PS1Vector:
#             ps1vector = np.array(self.result_obj.PS1Vector)
#             s1x = np.array(ps1vector[:, 0])
#             s1y = np.array(ps1vector[:, 1])
#             s1z = np.array(ps1vector[:, 2])
#         if self.result_obj.PS2Vector:
#             ps2vector = np.array(self.result_obj.PS2Vector)
#             s2x = np.array(ps2vector[:, 0])
#             s2y = np.array(ps2vector[:, 1])
#             s2z = np.array(ps2vector[:, 2])
#         if self.result_obj.PS3Vector:
#             ps3vector = np.array(self.result_obj.PS1Vector)
#             s3x = np.array(ps3vector[:, 0])
#             s3y = np.array(ps3vector[:, 1])
#             s3z = np.array(ps3vector[:, 2])

        FreeCAD.FEM_dialog["results_type"] = "None"
        self.update()
        self.restore_result_dialog()
        userdefined_eq = self.form.user_def_eq.toPlainText()  # Get equation to be used
        UserDefinedFormula = eval(userdefined_eq).tolist()
        self.result_obj.UserDefined = UserDefinedFormula
        minm = min(UserDefinedFormula)
        avg = sum(UserDefinedFormula) / len(UserDefinedFormula)
        maxm = max(UserDefinedFormula)
        self.update_colors_stats(UserDefinedFormula, "", minm, avg, maxm)

        # Dummy use of the variables to get around flake8 error
#         del x, y, z, T, Von, Peeq, P1, P2, P3
#         del sxx, syy, szz, sxy, sxz, syz
#         del exx, eyy, ezz, exy, exz, eyz
#         del MF, NP, rx, ry, rz, mc
#         del s1x, s1y, s1z, s2x, s2y, s2z, s3x, s3y, s3z

Why is this necessary, do I miss something :roll:
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: User Defined Equations Broken (FemResults Task View)

Post by bernd »

you do not need to comment the reinforcement lines. Just do a recalculation of your analysis. The result object attributes are created than.

The del line is a small bug. An idea would be to add:

Code: Select all

        s1x, s1y, s1z = None, None, None
        s2x, s2y, s2z = None, None, None
        s3x, s3y, s3z = None, None, None
But a global problem resists. If an empty result attribute is refered in user equeations an error is raised. Another try expect is needed around the eval ... I will go for a fix later today.
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: User Defined Equations Broken (FemResults Task View)

Post by bernd »

this is what I would like to make it ...

Code: Select all

        s1x, s1y, s1z = np.array([]), np.array([]), np.array([])
        s2x, s2y, s2z = np.array([]), np.array([]), np.array([])
        s3x, s3y, s3z = np.array([]), np.array([]), np.array([])
        # If PSxVector is empty all UserDefined equation does not work
        if self.result_obj.PS1Vector:
            ps1vector = np.array(self.result_obj.PS1Vector)
            s1x = np.array(ps1vector[:, 0])
            s1y = np.array(ps1vector[:, 1])
            s1z = np.array(ps1vector[:, 2])
        if self.result_obj.PS2Vector:
            ps2vector = np.array(self.result_obj.PS2Vector)
            s2x = np.array(ps2vector[:, 0])
            s2y = np.array(ps2vector[:, 1])
            s2z = np.array(ps2vector[:, 2])
        if self.result_obj.PS3Vector:
            ps3vector = np.array(self.result_obj.PS1Vector)
            s3x = np.array(ps3vector[:, 0])
            s3y = np.array(ps3vector[:, 1])
            s3z = np.array(ps3vector[:, 2])

        FreeCAD.FEM_dialog["results_type"] = "None"
        self.update()
        self.restore_result_dialog()
        userdefined_eq = self.form.user_def_eq.toPlainText()  # Get equation to be used
        UserDefinedFormula = eval(userdefined_eq).tolist()
        if UserDefinedFormula:
            self.result_obj.UserDefined = UserDefinedFormula
            minm = min(UserDefinedFormula)
            avg = sum(UserDefinedFormula) / len(UserDefinedFormula)
            maxm = max(UserDefinedFormula)
            self.update_colors_stats(UserDefinedFormula, "", minm, avg, maxm)
UR_
Veteran
Posts: 1355
Joined: Tue Jan 03, 2017 8:42 pm

Re: User Defined Equations Broken (FemResults Task View)

Post by UR_ »

Thanks! That worked. ;)
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: User Defined Equations Broken (FemResults Task View)

Post by bernd »

Post Reply