From 43dd1e32e8bf91164851c296d0f003d5eeecb1e7 Mon Sep 17 00:00:00 2001 From: FEA-eng <59876896+FEA-eng@users.noreply.github.com> Date: Mon, 13 Jan 2025 18:19:50 +0100 Subject: [PATCH] FEM: Print contact forces (#18840) * FEM: Update write_step_output.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * FEM: Update constraint_contact_shell_shell.inp --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../femsolver/calculix/write_step_output.py | 19 +++++++++++++++---- .../constraint_contact_shell_shell.inp | 3 +++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Mod/Fem/femsolver/calculix/write_step_output.py b/src/Mod/Fem/femsolver/calculix/write_step_output.py index 84c5113cf0..6b62441485 100644 --- a/src/Mod/Fem/femsolver/calculix/write_step_output.py +++ b/src/Mod/Fem/femsolver/calculix/write_step_output.py @@ -60,9 +60,6 @@ def write_step_output(f, ccxwriter): f.write(variables + "\n") # dat file - # reaction forces: freecad.org/tracker/view.php?id=2934 - # some hint can be found in this topic: - # https://forum.freecad.org/viewtopic.php?f=18&t=20664&start=10#p520642 if ccxwriter.member.cons_fixed or ccxwriter.member.cons_displacement: f.write("** outputs --> dat file\n") if ccxwriter.member.cons_fixed: @@ -107,7 +104,21 @@ def write_step_output(f, ccxwriter): "*NODE PRINT, NSET={}_RotNode, TOTALS=ONLY\n".format(femobj["Object"].Name) ) f.write("RF\n") - if ccxwriter.member.cons_fixed or ccxwriter.member.cons_displacement: + if ccxwriter.member.cons_contact: + # contact forces for all Constraint contact (only available for face-to-face penalty contact) + f.write("** contact forces for Constraint contact\n") + for femobj in ccxwriter.member.cons_contact: + # femobj --> dict, FreeCAD document object is femobj["Object"] + f.write( + "*CONTACT PRINT, MASTER={}, SLAVE={}\n".format( + "IND" + femobj["Object"].Name, "DEP" + femobj["Object"].Name + ) + ) + f.write("CF, CFN, CFS\n") + if any( + vars(ccxwriter.member).get(f"cons_{key}") + for key in ["fixed", "displacement", "rigidbody", "contact"] + ): f.write("\n") f.write(f"*OUTPUT, FREQUENCY={ccxwriter.solver_obj.OutputFrequency}") diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp b/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp index 5c982bd498..c73c15e8e7 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp @@ -38411,6 +38411,9 @@ S, E ** reaction forces for Constraint fixed *NODE PRINT, NSET=ConstraintFixed, TOTALS=ONLY RF +** contact forces for Constraint contact +*CONTACT PRINT, MASTER=INDConstraintContact, SLAVE=DEPConstraintContact +CF, CFN, CFS *OUTPUT, FREQUENCY=1 ***********************************************************