FEM: Amplitude support for rigid body constraint (#22898)

* FEM: Update FemConstraintRigidBody.cpp

* FEM: Update FemConstraintRigidBody.h

* FEM: Update write_constraint_rigidbody_step.py

* FEM: Update write_amplitude.py
This commit is contained in:
FEA-eng
2025-08-18 17:35:23 +02:00
committed by GitHub
parent f8367d263e
commit b110102ca5
4 changed files with 22 additions and 2 deletions

View File

@@ -109,6 +109,17 @@ ConstraintRigidBody::ConstraintRigidBody()
App::Prop_Output,
"Z-direction rotation/moment mode");
ADD_PROPERTY_TYPE(EnableAmplitude,
(false),
"ConstraintRigidBody",
(App::PropertyType)(App::Prop_None),
"Amplitude of the rigid body boundary condition or load");
ADD_PROPERTY_TYPE(AmplitudeValues,
(std::vector<std::string> {"0, 0", "1, 1"}),
"ConstraintRigidBody",
(App::PropertyType)(App::Prop_None),
"Amplitude values");
TranslationalModeX.setEnums(boundaryModeEnum);
TranslationalModeY.setEnums(boundaryModeEnum);
TranslationalModeZ.setEnums(boundaryModeEnum);

View File

@@ -37,6 +37,9 @@ public:
/// Constructor
ConstraintRigidBody();
App::PropertyBool EnableAmplitude;
App::PropertyStringList AmplitudeValues;
// Rigid Body parameters
App::PropertyPosition ReferenceNode;
App::PropertyPosition Displacement;

View File

@@ -44,6 +44,7 @@ def write_amplitude(f, ccxwriter):
ccxwriter.member.cons_heatflux,
ccxwriter.member.cons_temperature,
ccxwriter.member.cons_bodyheatsource,
ccxwriter.member.cons_rigidbody,
]
for constraint_list in constraint_lists:

View File

@@ -65,12 +65,17 @@ def write_constraint(f, femobj, rb_obj, ccxwriter):
ref_node_idx = node_count + 2 * rb_obj_idx + 1
rot_node_idx = node_count + 2 * rb_obj_idx + 2
if rb_obj.EnableAmplitude:
rb_amplitude = f", AMPLITUDE={rb_obj.Name}"
else:
rb_amplitude = ""
def write_mode(mode, node, dof, constraint, load):
if mode == "Constraint":
f.write("*BOUNDARY\n")
f.write(f"*BOUNDARY{rb_amplitude}\n")
f.write(f"{node},{dof},{dof},{constraint:.13G}\n")
elif mode == "Load":
f.write("*CLOAD\n")
f.write(f"*CLOAD{rb_amplitude}\n")
f.write(f"{node},{dof},{load:.13G}\n")
mode = [rb_obj.TranslationalModeX, rb_obj.TranslationalModeY, rb_obj.TranslationalModeZ]