From df215f4fce48661f8df93d0d6060f8190bd33593 Mon Sep 17 00:00:00 2001 From: fandaL Date: Mon, 9 Aug 2021 08:28:49 +0200 Subject: [PATCH] FEM:request for reaction forces on Constraint displacement --- .../Fem/femsolver/calculix/write_step_output.py | 14 ++++++++++++-- .../ccx_cantilever_prescribeddisplacement.inp | 3 +++ .../femtest/data/calculix/frequency_beamsimple.inp | 7 +++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Mod/Fem/femsolver/calculix/write_step_output.py b/src/Mod/Fem/femsolver/calculix/write_step_output.py index 117cf15f44..d7ac4d3b6c 100644 --- a/src/Mod/Fem/femsolver/calculix/write_step_output.py +++ b/src/Mod/Fem/femsolver/calculix/write_step_output.py @@ -60,8 +60,9 @@ def write_step_output(f, ccxwriter): # reaction forces: freecadweb.org/tracker/view.php?id=2934 # some hint can be found in this topic: # https://forum.freecadweb.org/viewtopic.php?f=18&t=20664&start=10#p520642 - if ccxwriter.member.cons_fixed: + if ccxwriter.member.cons_fixed or ccxwriter.member.cons_displacement: f.write("** outputs --> dat file\n") + if ccxwriter.member.cons_fixed: # reaction forces for all Constraint fixed f.write("** reaction forces for Constraint fixed\n") for femobj in ccxwriter.member.cons_fixed: @@ -69,7 +70,16 @@ def write_step_output(f, ccxwriter): fix_obj_name = femobj["Object"].Name f.write("*NODE PRINT, NSET={}, TOTALS=ONLY\n".format(fix_obj_name)) f.write("RF\n") - # TODO: add Constraint Displacement if nodes are restrained + if ccxwriter.member.cons_displacement: + # reaction forces for Constraint displacement constraining translation + f.write("** reaction forces for Constraint displacement constraining translations\n") + for femobj in ccxwriter.member.cons_displacement: + if not femobj["Object"].xFree or not femobj["Object"].yFree or not femobj["Object"].zFree: + # femobj --> dict, FreeCAD document object is femobj["Object"] + disp_obj_name = femobj["Object"].Name + f.write("*NODE PRINT, NSET={}, TOTALS=ONLY\n".format(disp_obj_name)) + f.write("RF\n") + if ccxwriter.member.cons_fixed or ccxwriter.member.cons_displacement: f.write("\n") # there is no need to write all integration point results diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_prescribeddisplacement.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_prescribeddisplacement.inp index 0a75d6db51..c3d571db8c 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_prescribeddisplacement.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_prescribeddisplacement.inp @@ -407,6 +407,9 @@ S, E ** reaction forces for Constraint fixed *NODE PRINT, NSET=ConstraintFixed, TOTALS=ONLY RF +** reaction forces for Constraint displacement constraining translation +*NODE PRINT, NSET=ConstraintDisplacmentPrescribed, TOTALS=ONLY +RF *********************************************************** diff --git a/src/Mod/Fem/femtest/data/calculix/frequency_beamsimple.inp b/src/Mod/Fem/femtest/data/calculix/frequency_beamsimple.inp index d176b65293..3203aa1474 100644 --- a/src/Mod/Fem/femtest/data/calculix/frequency_beamsimple.inp +++ b/src/Mod/Fem/femtest/data/calculix/frequency_beamsimple.inp @@ -17062,6 +17062,13 @@ Fix_YZ,3 U *EL FILE S, E +** outputs --> dat file +** reaction forces for Constraint displacement constraining translation +*NODE PRINT, NSET=Fix_XYZ, TOTALS=ONLY +RF +*NODE PRINT, NSET=Fix_YZ, TOTALS=ONLY +RF + *********************************************************** *END STEP