diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_rigidbody.py b/src/Mod/Fem/femsolver/calculix/write_constraint_rigidbody.py index 5d5e28c428..70d6933141 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_rigidbody.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_rigidbody.py @@ -73,6 +73,11 @@ def write_constraint(f, femobj, rb_obj, ccxwriter): f.write("{},{},{},{}\n".format(ref_node_idx, *rb_obj.ReferenceNode)) f.write("{},{},{},{}\n".format(rot_node_idx, *rb_obj.ReferenceNode)) + f.write("*NSET,NSET={}_RefNode\n".format(rb_obj.Name)) + f.write("{},\n".format(ref_node_idx)) + f.write("*NSET,NSET={}_RotNode\n".format(rb_obj.Name)) + f.write("{},\n".format(rot_node_idx)) + kw_line = "*RIGID BODY, NSET={}, REF NODE={}, ROT NODE={}".format(rb_obj.Name, ref_node_idx, rot_node_idx) f.write(kw_line + "\n") diff --git a/src/Mod/Fem/femsolver/calculix/write_step_output.py b/src/Mod/Fem/femsolver/calculix/write_step_output.py index 2ad190e3cc..21819d7864 100644 --- a/src/Mod/Fem/femsolver/calculix/write_step_output.py +++ b/src/Mod/Fem/femsolver/calculix/write_step_output.py @@ -84,6 +84,25 @@ def write_step_output(f, ccxwriter): ): f.write("*NODE PRINT, NSET={}, TOTALS=ONLY\n".format(femobj["Object"].Name)) f.write("RF\n") + if ccxwriter.member.cons_rigidbody: + # reaction forces/moments for Constraint rigid body + f.write("** reaction forces/moments for Constraint rigid body\n") + for femobj in ccxwriter.member.cons_rigidbody: + # femobj --> dict, FreeCAD document object is femobj["Object"] + if ( + femobj["Object"].TranslationalModeX != "Free" + or femobj["Object"].TranslationalModeY != "Free" + or femobj["Object"].TranslationalModeZ != "Free" + ): + f.write("*NODE PRINT, NSET={}_RefNode, TOTALS=ONLY\n".format(femobj["Object"].Name)) + f.write("RF\n") + if ( + femobj["Object"].RotationalModeX != "Free" + or femobj["Object"].RotationalModeY != "Free" + or femobj["Object"].RotationalModeZ != "Free" + ): + f.write("*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: f.write("\n") f.write("*OUTPUT, FREQUENCY={}".format(ccxwriter.solver_obj.OutputFrequency))