Skip to content

Commit e1eedec

Browse files
committed
Fem: Write reaction force from rigid body nodes - fixes FreeCAD#14558
1 parent 3b4598c commit e1eedec

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/Mod/Fem/femsolver/calculix/write_constraint_rigidbody.py

+5
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ def write_constraint(f, femobj, rb_obj, ccxwriter):
7373
f.write("{},{},{},{}\n".format(ref_node_idx, *rb_obj.ReferenceNode))
7474
f.write("{},{},{},{}\n".format(rot_node_idx, *rb_obj.ReferenceNode))
7575

76+
f.write("*NSET,NSET={}_RefNode\n".format(rb_obj.Name))
77+
f.write("{},\n".format(ref_node_idx))
78+
f.write("*NSET,NSET={}_RotNode\n".format(rb_obj.Name))
79+
f.write("{},\n".format(rot_node_idx))
80+
7681
kw_line = "*RIGID BODY, NSET={}, REF NODE={}, ROT NODE={}".format(rb_obj.Name, ref_node_idx, rot_node_idx)
7782

7883
f.write(kw_line + "\n")

src/Mod/Fem/femsolver/calculix/write_step_output.py

+19
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,25 @@ def write_step_output(f, ccxwriter):
8484
):
8585
f.write("*NODE PRINT, NSET={}, TOTALS=ONLY\n".format(femobj["Object"].Name))
8686
f.write("RF\n")
87+
if ccxwriter.member.cons_rigidbody:
88+
# reaction forces/moments for Constraint rigid body
89+
f.write("** reaction forces/moments for Constraint rigid body\n")
90+
for femobj in ccxwriter.member.cons_rigidbody:
91+
# femobj --> dict, FreeCAD document object is femobj["Object"]
92+
if (
93+
femobj["Object"].TranslationalModeX != "Free"
94+
or femobj["Object"].TranslationalModeY != "Free"
95+
or femobj["Object"].TranslationalModeZ != "Free"
96+
):
97+
f.write("*NODE PRINT, NSET={}_RefNode, TOTALS=ONLY\n".format(femobj["Object"].Name))
98+
f.write("RF\n")
99+
if (
100+
femobj["Object"].RotationalModeX != "Free"
101+
or femobj["Object"].RotationalModeY != "Free"
102+
or femobj["Object"].RotationalModeZ != "Free"
103+
):
104+
f.write("*NODE PRINT, NSET={}_RotNode, TOTALS=ONLY\n".format(femobj["Object"].Name))
105+
f.write("RF\n")
87106
if ccxwriter.member.cons_fixed or ccxwriter.member.cons_displacement:
88107
f.write("\n")
89108
f.write("*OUTPUT, FREQUENCY={}".format(ccxwriter.solver_obj.OutputFrequency))

0 commit comments

Comments
 (0)