Merge pull request #10935 from marioalexis84/Fem-force

Fem: Force constraint overhaul
This commit is contained in:
sliptonic
2023-10-05 12:12:06 -05:00
committed by GitHub
53 changed files with 4151 additions and 4146 deletions

View File

@@ -42,6 +42,9 @@ ConstraintForce::ConstraintForce()
"ConstraintForce",
(App::PropertyType)(App::Prop_None),
"Element giving direction of constraint");
// RefDispl must get a global scope, see
Direction.setScope(App::LinkScope::Global);
ADD_PROPERTY(Reversed, (0));
ADD_PROPERTY_TYPE(Points,
(Base::Vector3d()),
@@ -53,8 +56,9 @@ ConstraintForce::ConstraintForce()
"ConstraintForce",
App::PropertyType(App::Prop_ReadOnly | App::Prop_Output),
"Direction of arrows");
naturalDirectionVector =
Base::Vector3d(0, 0, 0); // by default use the null vector to indicate an invalid value
// by default use the null vector to indicate an invalid value
naturalDirectionVector = Base::Vector3d(0, 0, 0);
Points.setValues(std::vector<Base::Vector3d>());
}
@@ -63,6 +67,21 @@ App::DocumentObjectExecReturn* ConstraintForce::execute()
return Constraint::execute();
}
void ConstraintForce::handleChangedPropertyType(Base::XMLReader& reader,
const char* TypeName,
App::Property* prop)
{
// property Force had App::PropertyFloat, was changed to App::PropertyForce
if (prop == &Force && strcmp(TypeName, "App::PropertyFloat") == 0) {
App::PropertyFloat ForceProperty;
// restore the PropertyFloat to be able to set its value
ForceProperty.Restore(reader);
// force uses m while FreeCAD uses internally mm thus
// e.g. "2.5" must become 2500 to result in 2.5 N
Force.setValue(ForceProperty.getValue() * 1000);
}
}
void ConstraintForce::onChanged(const App::Property* prop)
{
// Note: If we call this at the end, then the arrows are not oriented correctly initially

View File

@@ -38,7 +38,7 @@ public:
/// Constructor
ConstraintForce();
App::PropertyFloat Force;
App::PropertyForce Force;
App::PropertyLinkSub Direction;
App::PropertyBool Reversed;
// Read-only (calculated values). These trigger changes in the ViewProvider
@@ -55,6 +55,9 @@ public:
}
protected:
void handleChangedPropertyType(Base::XMLReader& reader,
const char* TypeName,
App::Property* prop) override;
void onChanged(const App::Property* prop) override;
private:

View File

@@ -459,8 +459,8 @@ void CmdFemConstraintForce::activated(int)
"App.activeDocument().addObject(\"Fem::ConstraintForce\",\"%s\")",
FeatName.c_str());
doCommand(Doc,
"App.activeDocument().%s.Force = 1.0",
FeatName.c_str()); // OvG: set default not equal to 0
"App.activeDocument().%s.Force = \"1 N\"",
FeatName.c_str()); // OvG: set default to 1 N
doCommand(Doc,
"App.activeDocument().%s.Reversed = False",
FeatName.c_str()); // OvG: set default to False

View File

@@ -57,35 +57,12 @@ TaskFemConstraintForce::TaskFemConstraintForce(ViewProviderFemConstraintForce* C
ui->setupUi(proxy);
QMetaObject::connectSlotsByName(this);
// create a context menu for the listview of the references
createDeleteAction(ui->listReferences);
connect(deleteAction, &QAction::triggered, this, &TaskFemConstraintForce::onReferenceDeleted);
connect(ui->spinForce,
qOverload<double>(&Gui::QuantitySpinBox::valueChanged),
this,
&TaskFemConstraintForce::onForceChanged);
connect(ui->buttonDirection,
&QToolButton::clicked,
this,
&TaskFemConstraintForce::onButtonDirection);
connect(ui->checkReverse, &QCheckBox::toggled, this, &TaskFemConstraintForce::onCheckReverse);
connect(ui->listReferences,
&QListWidget::itemClicked,
this,
&TaskFemConstraintForce::setSelection);
this->groupLayout()->addWidget(proxy);
// Temporarily prevent unnecessary feature recomputes
ui->spinForce->blockSignals(true);
ui->listReferences->blockSignals(true);
ui->buttonDirection->blockSignals(true);
ui->checkReverse->blockSignals(true);
// Get the feature data
Fem::ConstraintForce* pcConstraint =
static_cast<Fem::ConstraintForce*>(ConstraintView->getObject());
double f = pcConstraint->Force.getValue();
auto force = pcConstraint->Force.getQuantityValue();
std::vector<App::DocumentObject*> Objects = pcConstraint->References.getValues();
std::vector<std::string> SubElements = pcConstraint->References.getSubValues();
std::vector<std::string> dirStrings = pcConstraint->Direction.getSubValues();
@@ -96,9 +73,10 @@ TaskFemConstraintForce::TaskFemConstraintForce(ViewProviderFemConstraintForce* C
bool reversed = pcConstraint->Reversed.getValue();
// Fill data into dialog elements
ui->spinForce->setUnit(pcConstraint->Force.getUnit());
ui->spinForce->setMinimum(0);
ui->spinForce->setMaximum(FLOAT_MAX);
ui->spinForce->setValue(f);
ui->spinForce->setValue(force);
ui->listReferences->clear();
for (std::size_t i = 0; i < Objects.size(); i++) {
ui->listReferences->addItem(makeRefText(Objects[i], SubElements[i]));
@@ -109,15 +87,25 @@ TaskFemConstraintForce::TaskFemConstraintForce(ViewProviderFemConstraintForce* C
ui->lineDirection->setText(dir.isEmpty() ? QString() : dir);
ui->checkReverse->setChecked(reversed);
ui->spinForce->blockSignals(false);
ui->listReferences->blockSignals(false);
ui->buttonDirection->blockSignals(false);
ui->checkReverse->blockSignals(false);
// create a context menu for the listview of the references
createDeleteAction(ui->listReferences);
connect(deleteAction, &QAction::triggered, this, &TaskFemConstraintForce::onReferenceDeleted);
connect(ui->buttonDirection,
&QToolButton::clicked,
this,
&TaskFemConstraintForce::onButtonDirection);
connect(ui->checkReverse, &QCheckBox::toggled, this, &TaskFemConstraintForce::onCheckReverse);
connect(ui->listReferences,
&QListWidget::itemClicked,
this,
&TaskFemConstraintForce::setSelection);
// Selection buttons
buttonGroup->addButton(ui->btnAdd, (int)SelectionChangeModes::refAdd);
buttonGroup->addButton(ui->btnRemove, (int)SelectionChangeModes::refRemove);
ui->spinForce->bind(pcConstraint->Force);
updateUI();
}
@@ -259,13 +247,6 @@ void TaskFemConstraintForce::removeFromSelection()
updateUI();
}
void TaskFemConstraintForce::onForceChanged(double f)
{
Fem::ConstraintForce* pcConstraint =
static_cast<Fem::ConstraintForce*>(ConstraintView->getObject());
pcConstraint->Force.setValue(f);
}
void TaskFemConstraintForce::onReferenceDeleted()
{
TaskFemConstraintForce::removeFromSelection(); // OvG: On right-click face is automatically
@@ -359,9 +340,9 @@ void TaskFemConstraintForce::onCheckReverse(const bool pressed)
pcConstraint->Reversed.setValue(pressed);
}
double TaskFemConstraintForce::getForce() const
const std::string TaskFemConstraintForce::getForce() const
{
return ui->spinForce->value().getValue();
return ui->spinForce->value().getSafeUserString().toStdString();
}
const std::string TaskFemConstraintForce::getReferences() const
@@ -467,21 +448,10 @@ bool TaskDlgFemConstraintForce::accept()
static_cast<const TaskFemConstraintForce*>(parameter);
try {
// Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "FEM force constraint changed"));
if (parameterForce->getForce() <= 0) {
QMessageBox::warning(parameter,
tr("Input error"),
tr("Please specify a force greater than 0"));
return false;
}
else {
QByteArray num = QByteArray::number(parameterForce->getForce());
Gui::Command::doCommand(Gui::Command::Doc,
"App.ActiveDocument.%s.Force = %s",
name.c_str(),
num.data());
}
Gui::Command::doCommand(Gui::Command::Doc,
"App.ActiveDocument.%s.Force = \"%s\"",
name.c_str(),
parameterForce->getForce().c_str());
std::string dirname = parameterForce->getDirectionName().data();
std::string dirobj = parameterForce->getDirectionObject().data();

View File

@@ -55,7 +55,7 @@ public:
explicit TaskFemConstraintForce(ViewProviderFemConstraintForce* ConstraintView,
QWidget* parent = nullptr);
~TaskFemConstraintForce() override;
double getForce() const;
const std::string getForce() const;
const std::string getReferences() const override;
const std::string getDirectionName() const;
const std::string getDirectionObject() const;
@@ -63,7 +63,6 @@ public:
private Q_SLOTS:
void onReferenceDeleted();
void onForceChanged(double);
void onButtonDirection(const bool pressed = false);
void onCheckReverse(bool);
void addToSelection() override;

View File

@@ -90,12 +90,18 @@
<item>
<widget class="QLabel" name="labelForce">
<property name="text">
<string>Load [N]</string>
<string>Force</string>
</property>
</widget>
</item>
<item>
<widget class="Gui::QuantitySpinBox" name="spinForce">
<property name="unit" stdset="0">
<string>N</string>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="value">
<double>500.000000000000000</double>
</property>

View File

@@ -103,7 +103,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "FemConstraintForce")
con_force.References = [(geom_obj, "Face6")]
con_force.Force = 40000.0
con_force.Force = "40000.0 N"
con_force.Direction = (geom_obj, ["Edge5"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -161,14 +161,14 @@ def setup(doc=None, solvertype="ccxtools"):
# constraints force
con_force_in_x = ObjectsFem.makeConstraintForce(doc, "Force_in_X")
con_force_in_x.References = [(geom_obj, ("Edge3", "Edge7", "Edge8", "Edge12"))]
con_force_in_x.Force = 155350
con_force_in_x.Force = "155350 N"
con_force_in_x.Reversed = False
con_force_in_x.Direction = (geom_obj, ["Edge4"])
analysis.addObject(con_force_in_x)
con_force_rev_x = ObjectsFem.makeConstraintForce(doc, "Force_rev_X")
con_force_rev_x.References = [(geom_obj, ("Edge1", "Edge5", "Edge10", "Edge14"))]
con_force_rev_x.Force = 155350
con_force_rev_x.Force = "155350 N"
con_force_rev_x.Reversed = True
con_force_rev_x.Direction = (geom_obj, ["Edge4"])
analysis.addObject(con_force_rev_x)

View File

@@ -141,7 +141,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Edge3")]
con_force.Force = 17162160 # 17'162.16 N
con_force.Force = "17162160 N"
con_force.Reversed = True
con_force.Direction = (geom_obj, ["Edge2"])
analysis.addObject(con_force)

View File

@@ -122,7 +122,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Face6")]
con_force.Force = 21
con_force.Force = "21 N"
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -115,7 +115,7 @@ def setup_cantilever_base_edge(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Vertex2")]
con_force.Force = 9000000.0 # 9'000'000 N = 9 MN
con_force.Force = "9000000.0 N" # 9 MN
con_force.Direction = (load_line, ["Edge1"])
con_force.Reversed = False
analysis.addObject(con_force)

View File

@@ -100,7 +100,7 @@ def setup_cantilever_base_face(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Edge3")]
con_force.Force = 9000000.0 # 9'000'000 N = 9 MN
con_force.Force = "9000000.0 N"
con_force.Direction = (geom_obj, ["Edge3"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -73,7 +73,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Face2")]
con_force.Force = 9000000.0
con_force.Force = "9000000.0 N"
con_force.Direction = (geom_obj, ["Edge5"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -78,7 +78,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geom_obj, "Vertex7"),
(geom_obj, "Vertex8")
]
con_force.Force = 9000000.0
con_force.Force = "9000000.0 N"
con_force.Direction = (doc.Box, ["Edge5"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -182,7 +182,7 @@ def setup(doc=None, solvertype="ccxtools"):
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
# TODO use point of tube boolean fragment
con_force.References = [(force_point, "Vertex1")]
con_force.Force = 5000.0
con_force.Force = "5000.0 N"
con_force.Direction = (load_line, ["Edge1"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -142,7 +142,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Edge2")]
con_force.Force = 10000.0 # 10000 N = 10 kN
con_force.Force = "10000.0 N" # 10 kN
con_force.Direction = (geom_obj, ["Edge2"])
con_force.Reversed = False
analysis.addObject(con_force)

View File

@@ -149,7 +149,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Face1")]
con_force.Force = 2500.0 # 2500 N = 2.5 kN
con_force.Force = "2500.0 N" # 2.5 kN
con_force.Direction = (load_line, ["Edge1"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -183,7 +183,7 @@ def setup(doc=None, solvertype="ccxtools"):
(doc.Box4, "Face6"),
(doc.Box5, "Face6")
]
con_force.Force = 10000.00
con_force.Force = "10000.00 N"
con_force.Direction = (doc.Box1, ["Edge1"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -182,7 +182,7 @@ def setup(doc=None, solvertype="ccxtools"):
(doc.Face4, "Edge4"),
(doc.Face5, "Edge4")
]
con_force.Force = 10000.00
con_force.Force = "10000.00 N"
con_force.Direction = (doc.Face1, ["Edge1"])
con_force.Reversed = True
analysis.addObject(con_force)

View File

@@ -170,7 +170,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geom_obj, "Vertex4"),
(geom_obj, "Vertex8"),
]
con_force.Force = 600 # 600 N on six nodes == 100 N/Node
con_force.Force = "600 N" # 600 N on six nodes == 100 N/Node
con_force.Reversed = False
con_force.Direction = (geom_obj, ["Edge2"])
analysis.addObject(con_force)

View File

@@ -151,7 +151,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, "Edge7")]
con_force.Force = 1000000.0
con_force.Force = "1000000.0 N"
con_force.Direction = (geom_obj, ["Edge8"])
con_force.Reversed = False
analysis.addObject(con_force)

View File

@@ -135,7 +135,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force1
con_force1 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce1")
con_force1.References = [(geom_obj, "Edge9")]
con_force1.Force = 100000.00
con_force1.Force = "100000.00 N"
con_force1.Direction = (geom_obj, ["Edge9"])
con_force1.Reversed = True
analysis.addObject(con_force1)
@@ -143,7 +143,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force2
con_force2 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce2")
con_force2.References = [(geom_obj, "Edge3")]
con_force2.Force = 100000.00
con_force2.Force = "100000.00 N"
con_force2.Direction = (geom_obj, ["Edge3"])
con_force2.Reversed = True
analysis.addObject(con_force2)
@@ -151,7 +151,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force3
con_force3 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce3")
con_force3.References = [(geom_obj, "Edge11")]
con_force3.Force = 100000.00
con_force3.Force = "100000.00 N"
con_force3.Direction = (geom_obj, ["Edge11"])
con_force3.Reversed = True
analysis.addObject(con_force3)
@@ -159,7 +159,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force4
con_force4 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce4")
con_force4.References = [(geom_obj, "Edge6")]
con_force4.Force = 100000.00
con_force4.Force = "100000.00 N"
con_force4.Direction = (geom_obj, ["Edge6"])
con_force4.Reversed = True
analysis.addObject(con_force4)

View File

@@ -289,7 +289,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force1
con_force1 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce1")
con_force1.References = [(geoforces_obj, "Vertex1"), (geoforces_obj, "Vertex14")]
con_force1.Force = 5555.56
con_force1.Force = "5555.56 N"
con_force1.Direction = (geom_obj, ["Edge9"])
con_force1.Reversed = False
analysis.addObject(con_force1)
@@ -297,7 +297,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force2
con_force2 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce2")
con_force2.References = [(geoforces_obj, "Vertex2"), (geoforces_obj, "Vertex8")]
con_force2.Force = 5555.56
con_force2.Force = "5555.56 N"
con_force2.Direction = (geom_obj, ["Edge3"])
con_force2.Reversed = False
analysis.addObject(con_force2)
@@ -310,7 +310,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex22"),
(geoforces_obj, "Vertex23"),
(geoforces_obj, "Vertex24"), ]
con_force3.Force = 27777.78
con_force3.Force = "27777.78 N"
con_force3.Direction = (geom_obj, ["Edge9"])
con_force3.Reversed = False
analysis.addObject(con_force3)
@@ -323,7 +323,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex11"),
(geoforces_obj, "Vertex12"),
(geoforces_obj, "Vertex13"), ]
con_force4.Force = 27777.78
con_force4.Force = "27777.78 N"
con_force4.Direction = (geom_obj, ["Edge3"])
con_force4.Reversed = False
analysis.addObject(con_force4)
@@ -337,7 +337,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex46"),
(geoforces_obj, "Vertex47"),
(geoforces_obj, "Vertex48"), ]
con_force5.Force = 66666.67
con_force5.Force = "66666.67 N"
con_force5.Direction = (geom_obj, ["Edge9"])
con_force5.Reversed = False
analysis.addObject(con_force5)
@@ -351,7 +351,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex34"),
(geoforces_obj, "Vertex35"),
(geoforces_obj, "Vertex36"), ]
con_force6.Force = 66666.67
con_force6.Force = "66666.67 N"
con_force6.Direction = (geom_obj, ["Edge3"])
con_force6.Reversed = False
analysis.addObject(con_force6)
@@ -359,7 +359,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force7
con_force7 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce7")
con_force7.References = [(geoforces_obj, "Vertex1"), (geoforces_obj, "Vertex2")]
con_force7.Force = 5555.56
con_force7.Force = "5555.56 N"
con_force7.Direction = (geom_obj, ["Edge11"])
con_force7.Reversed = False
analysis.addObject(con_force7)
@@ -367,7 +367,7 @@ def setup(doc=None, solvertype="ccxtools"):
# con_force8
con_force8 = ObjectsFem.makeConstraintForce(doc, name="ConstraintForce8")
con_force8.References = [(geoforces_obj, "Vertex8"), (geoforces_obj, "Vertex14")]
con_force8.Force = 5555.56
con_force8.Force = "5555.56 N"
con_force8.Direction = (geom_obj, ["Edge6"])
con_force8.Reversed = False
analysis.addObject(con_force8)
@@ -380,7 +380,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex5"),
(geoforces_obj, "Vertex6"),
(geoforces_obj, "Vertex7"), ]
con_force9.Force = 27777.78
con_force9.Force = "27777.78 N"
con_force9.Direction = (geom_obj, ["Edge11"])
con_force9.Reversed = False
analysis.addObject(con_force9)
@@ -393,7 +393,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex17"),
(geoforces_obj, "Vertex18"),
(geoforces_obj, "Vertex19"), ]
con_force10.Force = 27777.78
con_force10.Force = "27777.78 N"
con_force10.Direction = (geom_obj, ["Edge6"])
con_force10.Reversed = False
analysis.addObject(con_force10)
@@ -407,7 +407,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex28"),
(geoforces_obj, "Vertex29"),
(geoforces_obj, "Vertex30"), ]
con_force11.Force = 66666.67
con_force11.Force = "66666.67 N"
con_force11.Direction = (geom_obj, ["Edge11"])
con_force11.Reversed = False
analysis.addObject(con_force11)
@@ -421,7 +421,7 @@ def setup(doc=None, solvertype="ccxtools"):
(geoforces_obj, "Vertex40"),
(geoforces_obj, "Vertex41"),
(geoforces_obj, "Vertex42"), ]
con_force12.Force = 66666.67
con_force12.Force = "66666.67 N"
con_force12.Direction = (geom_obj, ["Edge6"])
con_force12.Reversed = False
analysis.addObject(con_force12)

View File

@@ -446,7 +446,7 @@ def setup(doc=None, solvertype="ccxtools"):
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, ("Vertex5", "Vertex6"))]
con_force.Force = 60000.0 # 30 kN on each Node
con_force.Force = "60000.0 N" # 30 kN on each Node
con_force.Direction = (load_line, ["Edge1"])
con_force.Reversed = False
analysis.addObject(con_force)

View File

@@ -803,7 +803,8 @@ def get_force_obj_vertex_nodeload_table(
# ("refshape_name.elemname", node_load_table)
# ]
force_obj_node_load_table = []
node_load = frc_obj.Force / len(frc_obj.References)
force_quantity = FreeCAD.Units.Quantity(frc_obj.Force.getValueAs("N"))
node_load = force_quantity / len(frc_obj.References)
for o, elem_tup in frc_obj.References:
node_count = len(elem_tup)
for elem in elem_tup:
@@ -863,7 +864,8 @@ def get_force_obj_edge_nodeload_table(
)
sum_ref_edge_length += ref_edge.Length
if sum_ref_edge_length != 0:
force_per_sum_ref_edge_length = frc_obj.Force / sum_ref_edge_length
force_quantity = FreeCAD.Units.Quantity(frc_obj.Force.getValueAs("N"))
force_per_sum_ref_edge_length = force_quantity / sum_ref_edge_length
for o, elem_tup in frc_obj.References:
for elem in elem_tup:
ref_edge = o.Shape.getElement(elem)
@@ -907,7 +909,8 @@ def get_force_obj_edge_nodeload_table(
for node in ref_shape[1]:
sum_node_load += ref_shape[1][node] # for debugging
ratio = sum_node_load / frc_obj.Force
force_quantity = FreeCAD.Units.Quantity(frc_obj.Force.getValueAs("N"))
ratio = sum_node_load / force_quantity
if ratio < 0.99 or ratio > 1.01:
FreeCAD.Console.PrintMessage(
"Deviation sum_node_load to frc_obj.Force is more than 1% : {}\n"
@@ -927,7 +930,7 @@ def get_force_obj_edge_nodeload_table(
)
FreeCAD.Console.PrintMessage(
" frc_obj.Force: {}\n"
.format(frc_obj.Force)
.format(force_quantity)
)
FreeCAD.Console.PrintMessage(
" the reason could be simply a circle length --> "
@@ -1135,7 +1138,8 @@ def get_force_obj_face_nodeload_table(
)
sum_ref_face_area += ref_face.Area
if sum_ref_face_area != 0:
force_per_sum_ref_face_area = frc_obj.Force / sum_ref_face_area
force_quantity = FreeCAD.Units.Quantity(frc_obj.Force.getValueAs("N"))
force_per_sum_ref_face_area = force_quantity / sum_ref_face_area
for o, elem_tup in frc_obj.References:
for elem in elem_tup:
ref_face = o.Shape.getElement(elem)
@@ -1178,7 +1182,8 @@ def get_force_obj_face_nodeload_table(
for node in ref_shape[1]:
sum_node_load += ref_shape[1][node] # for debugging
ratio = sum_node_load / frc_obj.Force
force_quantity = FreeCAD.Units.Quantity(frc_obj.Force.getValueAs("N"))
ratio = sum_node_load / force_quantity
if ratio < 0.99 or ratio > 1.01:
FreeCAD.Console.PrintMessage(
"Deviation sum_node_load to frc_obj.Force is more than 1% : {}\n"
@@ -1198,7 +1203,7 @@ def get_force_obj_face_nodeload_table(
)
FreeCAD.Console.PrintMessage(
" frc_obj.Force: {}\n"
.format(frc_obj.Force)
.format(force_quantity)
)
FreeCAD.Console.PrintMessage(
" the reason could be simply a circle area --> "

View File

@@ -54,14 +54,15 @@ def write_meshdata_constraint(f, femobj, force_obj, ccxwriter):
f.write("** {}\n".format(ref_shape[0]))
for n in sorted(ref_shape[1]):
node_load = ref_shape[1][n]
# the loads in ref_shape[1][n] are without unit
if abs(direction_vec.x) > dir_zero_tol:
v1 = "{:.13E}".format(direction_vec.x * node_load)
v1 = "{}".format(direction_vec.x * node_load)
f.write("{},1,{}\n".format(n, v1))
if abs(direction_vec.y) > dir_zero_tol:
v2 = "{:.13E}".format(direction_vec.y * node_load)
v2 = "{}".format(direction_vec.y * node_load)
f.write("{},2,{}\n".format(n, v2))
if abs(direction_vec.z) > dir_zero_tol:
v3 = "{:.13E}".format(direction_vec.z * node_load)
v3 = "{}".format(direction_vec.z * node_load)
f.write("{},3,{}\n".format(n, v3))
f.write("\n")
f.write("\n")

View File

@@ -97,7 +97,7 @@ class DeformationWriter:
for obj in self.write.getMember("Fem::ConstraintForce"):
if obj.References:
for name in obj.References[0][1]:
force = self.write.getFromUi(obj.Force, "N", "M*L*T^-2")
force = float(obj.Force.getValueAs("N"))
self.write.boundary(name, "Force 1", obj.DirectionVector.x * force)
self.write.boundary(name, "Force 2", obj.DirectionVector.y * force)
self.write.boundary(name, "Force 3", obj.DirectionVector.z * force)

View File

@@ -313,7 +313,7 @@ class ElasticityWriter:
for obj in self.write.getMember("Fem::ConstraintForce"):
if obj.References:
for name in obj.References[0][1]:
force = self.write.getFromUi(obj.Force, "N", "M*L*T^-2")
force = float(obj.Force.getValueAs("N"))
self.write.boundary(name, "Force 1", obj.DirectionVector.x * force)
self.write.boundary(name, "Force 2", obj.DirectionVector.y * force)
self.write.boundary(name, "Force 3", obj.DirectionVector.z * force)

View File

@@ -50,6 +50,7 @@ def add_con_force(f, model, mystran_writer):
for ref_shape in femobj["NodeLoadTable"]:
force_code += "# {}\n".format(ref_shape[0])
for n in sorted(ref_shape[1]):
# the loads in ref_shape[1][n] are without unit
node_load = ref_shape[1][n]
force_code += (
"model.add_force(sid={}, node={}, mag={}, xyz=({}, {}, {}))\n"

View File

@@ -157,6 +157,7 @@ class FemInputWriterZ88(writerbase.FemInputWriter):
direction_vec = femobj["Object"].DirectionVector
for ref_shape in femobj["NodeLoadTable"]:
for n in sorted(ref_shape[1]):
# the loads in ref_shape[1][n] are without unit
node_load = ref_shape[1][n]
if (direction_vec.x != 0.0):
v1 = direction_vec.x * node_load

View File

@@ -507,47 +507,47 @@ FemConstraintFixed,3
*CLOAD
** FemConstraintForce
** node loads on shape: Box:Face6
2,3,-0.0000000000000E+00
4,3,-0.0000000000000E+00
6,3,-0.0000000000000E+00
8,3,-0.0000000000000E+00
18,3,-0.0000000000000E+00
19,3,-8.3333333333333E+02
20,3,-8.3333333333333E+02
30,3,-0.0000000000000E+00
31,3,-8.3333333333333E+02
32,3,-8.3333333333333E+02
36,3,-0.0000000000000E+00
37,3,-8.3333333333333E+02
38,3,-8.3333333333333E+02
42,3,-0.0000000000000E+00
43,3,-8.3333333333333E+02
44,3,-8.3333333333333E+02
170,3,-0.0000000000000E+00
171,3,-0.0000000000000E+00
172,3,-0.0000000000000E+00
173,3,-0.0000000000000E+00
174,3,-0.0000000000000E+00
175,3,-1.6666666666667E+03
176,3,-1.6666666666667E+03
177,3,-1.6666666666667E+03
178,3,-1.6666666666667E+03
179,3,-1.6666666666667E+03
180,3,-1.6666666666667E+03
181,3,-1.6666666666667E+03
182,3,-1.6666666666667E+03
183,3,-1.6666666666667E+03
184,3,-1.6666666666667E+03
185,3,-1.6666666666667E+03
186,3,-1.6666666666667E+03
187,3,-1.6666666666667E+03
188,3,-1.6666666666667E+03
189,3,-1.6666666666667E+03
190,3,-1.6666666666667E+03
191,3,-1.6666666666667E+03
192,3,-1.6666666666667E+03
193,3,-1.6666666666667E+03
194,3,-1.6666666666667E+03
2,3,-0.0
4,3,-0.0
6,3,-0.0
8,3,-0.0
18,3,-0.0
19,3,-833.3333333333335
20,3,-833.3333333333335
30,3,-0.0
31,3,-833.3333333333335
32,3,-833.3333333333335
36,3,-0.0
37,3,-833.3333333333335
38,3,-833.3333333333335
42,3,-0.0
43,3,-833.3333333333335
44,3,-833.3333333333335
170,3,-0.0
171,3,-0.0
172,3,-0.0
173,3,-0.0
174,3,-0.0
175,3,-1666.666666666667
176,3,-1666.666666666667
177,3,-1666.666666666667
178,3,-1666.666666666667
179,3,-1666.666666666667
180,3,-1666.666666666667
181,3,-1666.666666666667
182,3,-1666.666666666667
183,3,-1666.666666666667
184,3,-1666.666666666667
185,3,-1666.666666666667
186,3,-1666.666666666667
187,3,-1666.666666666667
188,3,-1666.666666666667
189,3,-1666.666666666667
190,3,-1666.666666666667
191,3,-1666.666666666667
192,3,-1666.666666666667
193,3,-1666.666666666667
194,3,-1666.666666666667

View File

@@ -764,31 +764,31 @@ ConstraintFixed,3
*CLOAD
** ConstraintForce
** node loads on shape: Beam:Face6
65,3,-3.2812500000000E-01
66,3,-6.5625000000000E-01
67,3,-6.5625000000000E-01
68,3,-1.3125000000000E+00
101,3,-6.5625000000000E-01
102,3,-1.3125000000000E+00
135,3,-6.5625000000000E-01
136,3,-1.3125000000000E+00
169,3,-3.2812500000000E-01
170,3,-6.5625000000000E-01
203,3,-6.5625000000000E-01
204,3,-1.3125000000000E+00
221,3,-1.3125000000000E+00
238,3,-1.3125000000000E+00
255,3,-6.5625000000000E-01
288,3,-6.5625000000000E-01
289,3,-1.3125000000000E+00
306,3,-1.3125000000000E+00
323,3,-1.3125000000000E+00
340,3,-6.5625000000000E-01
373,3,-3.2812500000000E-01
374,3,-6.5625000000000E-01
391,3,-6.5625000000000E-01
408,3,-6.5625000000000E-01
425,3,-3.2812500000000E-01
65,3,-0.328125
66,3,-0.65625
67,3,-0.65625
68,3,-1.3125
101,3,-0.65625
102,3,-1.3125
135,3,-0.65625
136,3,-1.3125
169,3,-0.328125
170,3,-0.65625
203,3,-0.65625
204,3,-1.3125
221,3,-1.3125
238,3,-1.3125
255,3,-0.65625
288,3,-0.65625
289,3,-1.3125
306,3,-1.3125
323,3,-1.3125
340,3,-0.65625
373,3,-0.328125
374,3,-0.65625
391,3,-0.65625
408,3,-0.65625
425,3,-0.328125
@@ -809,8 +809,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25065 (Git)
** written on --> Tue Jun 15 10:36:32 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 03:37:15 2023
** file name --> ccx_buckling_flexuralbuckling.FCStd
** analysis name --> Analysis
**

View File

@@ -83,7 +83,7 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
2,3,-9000000.0
@@ -104,8 +104,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25432 (Git)
** written on --> Wed Aug 4 22:12:24 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:29:54 2023
** file name -->
** analysis name --> Analysis
**

View File

@@ -83,7 +83,7 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
2,3,-9000000.0
@@ -104,8 +104,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25432 (Git)
** written on --> Wed Aug 4 22:13:20 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 03:47:22 2023
** file name -->
** analysis name --> Analysis
**

View File

@@ -83,7 +83,7 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
2,3,-9000000.0
@@ -104,8 +104,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25432 (Git)
** written on --> Wed Aug 4 22:14:46 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 03:48:55 2023
** file name -->
** analysis name --> Analysis
**

View File

@@ -403,27 +403,27 @@ ConstraintFixed,3
*CLOAD
** ConstraintForce
** node loads on shape: Box:Face2
5,3,1.8750000000000E+05
6,3,1.8750000000000E+05
7,3,1.8750000000000E+05
8,3,1.8750000000000E+05
21,3,-7.5000000000000E+05
22,3,3.7500000000000E+05
23,3,-7.5000000000000E+05
24,3,-7.5000000000000E+05
25,3,3.7500000000000E+05
26,3,-7.5000000000000E+05
27,3,-7.5000000000000E+05
28,3,3.7500000000000E+05
29,3,-7.5000000000000E+05
30,3,-7.5000000000000E+05
31,3,3.7500000000000E+05
32,3,-7.5000000000000E+05
98,3,-1.5000000000000E+06
99,3,-1.5000000000000E+06
100,3,7.5000000000000E+05
101,3,-1.5000000000000E+06
102,3,-1.5000000000000E+06
5,3,187500.00000000003
6,3,187500.00000000003
7,3,187500.00000000003
8,3,187500.00000000003
21,3,-750000.0000000001
22,3,375000.00000000006
23,3,-750000.0000000001
24,3,-750000.0000000001
25,3,375000.00000000006
26,3,-750000.0000000001
27,3,-750000.0000000001
28,3,375000.00000000006
29,3,-750000.0000000001
30,3,-750000.0000000001
31,3,375000.00000000006
32,3,-750000.0000000001
98,3,-1500000.0000000002
99,3,-1500000.0000000002
100,3,750000.0000000001
101,3,-1500000.0000000002
102,3,-1500000.0000000002
@@ -444,8 +444,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.19767 (Git)
** written on --> Sun Mar 1 22:34:34 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 04:39:55 2023
** file name --> CantilverHexa20FaceLoad.FCStd
** analysis name --> Analysis
**

View File

@@ -107,9 +107,9 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node loads on shape: CanileverPlate:Edge3
3,3,-2.2500000000000E+06
4,3,-2.2500000000000E+06
13,3,-4.5000000000000E+06
3,3,-2250000.0
4,3,-2250000.0
13,3,-4500000.0
@@ -130,8 +130,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25347 (Git)
** written on --> Thu Jul 29 22:17:23 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:29:04 2023
** file name --> test.FCStd
** analysis name --> Analysis
**

View File

@@ -95,11 +95,11 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node loads on shape: CanileverPlate:Edge3
3,3,-7.5000000000000E+05
4,3,-7.5000000000000E+05
11,3,-1.5000000000000E+06
12,3,-3.0000000000000E+06
13,3,-3.0000000000000E+06
3,3,-750000.0
4,3,-750000.0
11,3,-1500000.0
12,3,-3000000.0
13,3,-3000000.0
@@ -120,8 +120,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25343 (Git)
** written on --> Thu Jul 29 13:06:02 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:28:22 2023
** file name --> ccx_cantilever_ele_quad8.FCStd
** analysis name --> Analysis
**

View File

@@ -225,7 +225,7 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
2,3,-9000000.0
@@ -246,8 +246,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25335 (Git)
** written on --> Wed Jul 28 17:01:46 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 04:06:59 2023
** file name --> test.FCStd
** analysis name --> Analysis
**

View File

@@ -83,7 +83,7 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
2,3,-9000000.0
@@ -104,8 +104,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25335 (Git)
** written on --> Wed Jul 28 16:59:39 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 04:06:59 2023
** file name --> test.FCStd
** analysis name --> Analysis
**

View File

@@ -1583,14 +1583,14 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node loads on shape: CanileverPlate:Edge3
3,3,-6.4285714285714E+05
4,3,-6.4285714285715E+05
64,3,-1.2857142857143E+06
65,3,-1.2857142857143E+06
66,3,-1.2857142857143E+06
67,3,-1.2857142857143E+06
68,3,-1.2857142857143E+06
69,3,-1.2857142857143E+06
3,3,-642857.1428571417
4,3,-642857.1428571455
64,3,-1285714.2857142843
65,3,-1285714.285714283
66,3,-1285714.28571428
67,3,-1285714.2857142847
68,3,-1285714.28571429
69,3,-1285714.2857142906
@@ -1611,8 +1611,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25335 (Git)
** written on --> Wed Jul 28 16:57:44 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:27:22 2023
** file name --> test.FCStd
** analysis name --> Analysis
**

View File

@@ -313,11 +313,11 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node loads on shape: CanileverPlate:Edge3
3,3,-7.5000000000000E+05
4,3,-7.5000000000000E+05
39,3,-1.5000000000000E+06
40,3,-3.0000000000000E+06
41,3,-3.0000000000000E+06
3,3,-750000.0
4,3,-750000.0
39,3,-1500000.0
40,3,-3000000.0
41,3,-3000000.0
@@ -338,8 +338,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25335 (Git)
** written on --> Wed Jul 28 17:09:34 2021
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 04:06:59 2023
** file name --> test.FCStd
** analysis name --> Analysis
**

View File

@@ -377,19 +377,19 @@ ConstraintFixed,3
*CLOAD
** ConstraintForce
** node loads on shape: Box:Face2
1,3,-0.0000000000000E+00
2,3,-0.0000000000000E+00
3,3,-0.0000000000000E+00
4,3,-0.0000000000000E+00
49,3,-0.0000000000000E+00
64,3,-7.5000000000000E+05
88,3,-7.5000000000000E+05
100,3,-7.5000000000000E+05
102,3,-7.5000000000000E+05
188,3,-1.5000000000000E+06
189,3,-1.5000000000000E+06
190,3,-1.5000000000000E+06
191,3,-1.5000000000000E+06
1,3,-0.0
2,3,-0.0
3,3,-0.0
4,3,-0.0
49,3,-0.0
64,3,-750000.0000000001
88,3,-750000.0000000001
100,3,-750000.0000000001
102,3,-750000.0000000001
188,3,-1500000.0000000002
189,3,-1500000.0000000002
190,3,-1500000.0000000002
191,3,-1500000.0000000002
@@ -410,8 +410,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.21875 (Git)
** written on --> Tue Jul 7 07:19:22 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:26:29 2023
** file name --> ccx_cantilever_faceload.FCStd
** analysis name --> Analysis
**

View File

@@ -377,16 +377,16 @@ ConstraintFixed,3
*CLOAD
** ConstraintForce
** node load on shape: Box:Vertex5
4,3,-2.2500000000000E+06
4,3,-2250000.0
** node load on shape: Box:Vertex6
3,3,-2.2500000000000E+06
3,3,-2250000.0
** node load on shape: Box:Vertex7
2,3,-2.2500000000000E+06
2,3,-2250000.0
** node load on shape: Box:Vertex8
1,3,-2.2500000000000E+06
1,3,-2250000.0
@@ -407,8 +407,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.21875 (Git)
** written on --> Tue Jul 7 07:19:27 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 03:54:52 2023
** file name --> ccx_cantilever_nodeload.FCStd
** analysis name --> Analysis
**

View File

@@ -38394,7 +38394,7 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node load on shape: Load_place_point:Vertex1
5,2,-5.0000000000000E+03
5,2,-5000.0
@@ -38415,8 +38415,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.19278 (Git)
** written on --> Tue Jan 14 20:17:09 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:18:47 2023
** file name --> Contact_Shell_Shell.FCStd
** analysis name --> Analysis
**

View File

@@ -18630,9 +18630,9 @@ ConstraintFixed,3
*CLOAD
** ConstraintForce
** node loads on shape: BooleanFragments:Edge2
2,2,1.6666666666667E+03
8,2,1.6666666666667E+03
385,2,6.6666666666667E+03
2,2,1666.6666666666667
8,2,1666.6666666666667
385,2,6666.666666666667
@@ -18653,8 +18653,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.19481 (Git)
** written on --> Wed Feb 5 08:55:37 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 04:35:16 2023
** file name -->
** analysis name --> Analysis
**

View File

@@ -2569,119 +2569,119 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce
** node loads on shape: Face1:Edge4
9,2,-3.3333333333333E+01
11,2,-3.3333333333333E+01
118,2,-6.6666666666667E+01
119,2,-6.6666666666667E+01
120,2,-6.6666666666667E+01
121,2,-6.6666666666667E+01
122,2,-6.6666666666667E+01
123,2,-6.6666666666667E+01
124,2,-6.6666666666667E+01
125,2,-6.6666666666667E+01
126,2,-6.6666666666667E+01
472,2,-1.3333333333333E+02
473,2,-1.3333333333333E+02
474,2,-1.3333333333333E+02
475,2,-1.3333333333333E+02
476,2,-1.3333333333333E+02
477,2,-1.3333333333333E+02
478,2,-1.3333333333333E+02
479,2,-1.3333333333333E+02
480,2,-1.3333333333333E+02
481,2,-1.3333333333333E+02
9,2,-33.33333333333333
11,2,-33.33333333333333
118,2,-66.66666666666666
119,2,-66.66666666666666
120,2,-66.66666666666666
121,2,-66.66666666666666
122,2,-66.66666666666666
123,2,-66.66666666666666
124,2,-66.66666666666666
125,2,-66.66666666666666
126,2,-66.66666666666666
472,2,-133.33333333333331
473,2,-133.33333333333331
474,2,-133.33333333333331
475,2,-133.33333333333331
476,2,-133.33333333333331
477,2,-133.33333333333331
478,2,-133.33333333333331
479,2,-133.33333333333331
480,2,-133.33333333333331
481,2,-133.33333333333331
** node loads on shape: Face2:Edge4
7,2,-3.3333333333333E+01
9,2,-3.3333333333333E+01
96,2,-6.6666666666667E+01
97,2,-6.6666666666667E+01
98,2,-6.6666666666667E+01
99,2,-6.6666666666667E+01
100,2,-6.6666666666667E+01
101,2,-6.6666666666667E+01
102,2,-6.6666666666667E+01
103,2,-6.6666666666667E+01
104,2,-6.6666666666667E+01
447,2,-1.3333333333333E+02
448,2,-1.3333333333333E+02
449,2,-1.3333333333333E+02
450,2,-1.3333333333333E+02
451,2,-1.3333333333333E+02
452,2,-1.3333333333333E+02
453,2,-1.3333333333333E+02
454,2,-1.3333333333333E+02
455,2,-1.3333333333333E+02
456,2,-1.3333333333333E+02
7,2,-33.33333333333333
9,2,-33.33333333333333
96,2,-66.66666666666666
97,2,-66.66666666666666
98,2,-66.66666666666666
99,2,-66.66666666666666
100,2,-66.66666666666666
101,2,-66.66666666666666
102,2,-66.66666666666666
103,2,-66.66666666666666
104,2,-66.66666666666666
447,2,-133.33333333333331
448,2,-133.33333333333331
449,2,-133.33333333333331
450,2,-133.33333333333331
451,2,-133.33333333333331
452,2,-133.33333333333331
453,2,-133.33333333333331
454,2,-133.33333333333331
455,2,-133.33333333333331
456,2,-133.33333333333331
** node loads on shape: Face3:Edge4
5,2,-3.3333333333333E+01
7,2,-3.3333333333333E+01
74,2,-6.6666666666667E+01
75,2,-6.6666666666667E+01
76,2,-6.6666666666667E+01
77,2,-6.6666666666667E+01
78,2,-6.6666666666667E+01
79,2,-6.6666666666667E+01
80,2,-6.6666666666667E+01
81,2,-6.6666666666667E+01
82,2,-6.6666666666667E+01
422,2,-1.3333333333333E+02
423,2,-1.3333333333333E+02
424,2,-1.3333333333333E+02
425,2,-1.3333333333333E+02
426,2,-1.3333333333333E+02
427,2,-1.3333333333333E+02
428,2,-1.3333333333333E+02
429,2,-1.3333333333333E+02
430,2,-1.3333333333333E+02
431,2,-1.3333333333333E+02
5,2,-33.33333333333333
7,2,-33.33333333333333
74,2,-66.66666666666666
75,2,-66.66666666666666
76,2,-66.66666666666666
77,2,-66.66666666666666
78,2,-66.66666666666666
79,2,-66.66666666666666
80,2,-66.66666666666666
81,2,-66.66666666666666
82,2,-66.66666666666666
422,2,-133.33333333333331
423,2,-133.33333333333331
424,2,-133.33333333333331
425,2,-133.33333333333331
426,2,-133.33333333333331
427,2,-133.33333333333331
428,2,-133.33333333333331
429,2,-133.33333333333331
430,2,-133.33333333333331
431,2,-133.33333333333331
** node loads on shape: Face4:Edge4
3,2,-3.3333333333333E+01
5,2,-3.3333333333333E+01
52,2,-6.6666666666667E+01
53,2,-6.6666666666667E+01
54,2,-6.6666666666667E+01
55,2,-6.6666666666667E+01
56,2,-6.6666666666667E+01
57,2,-6.6666666666667E+01
58,2,-6.6666666666667E+01
59,2,-6.6666666666667E+01
60,2,-6.6666666666667E+01
397,2,-1.3333333333333E+02
398,2,-1.3333333333333E+02
399,2,-1.3333333333333E+02
400,2,-1.3333333333333E+02
401,2,-1.3333333333333E+02
402,2,-1.3333333333333E+02
403,2,-1.3333333333333E+02
404,2,-1.3333333333333E+02
405,2,-1.3333333333333E+02
406,2,-1.3333333333333E+02
3,2,-33.33333333333333
5,2,-33.33333333333333
52,2,-66.66666666666666
53,2,-66.66666666666666
54,2,-66.66666666666666
55,2,-66.66666666666666
56,2,-66.66666666666666
57,2,-66.66666666666666
58,2,-66.66666666666666
59,2,-66.66666666666666
60,2,-66.66666666666666
397,2,-133.33333333333331
398,2,-133.33333333333331
399,2,-133.33333333333331
400,2,-133.33333333333331
401,2,-133.33333333333331
402,2,-133.33333333333331
403,2,-133.33333333333331
404,2,-133.33333333333331
405,2,-133.33333333333331
406,2,-133.33333333333331
** node loads on shape: Face5:Edge4
1,2,-3.3333333333333E+01
3,2,-3.3333333333333E+01
26,2,-6.6666666666667E+01
27,2,-6.6666666666667E+01
28,2,-6.6666666666667E+01
29,2,-6.6666666666667E+01
30,2,-6.6666666666667E+01
31,2,-6.6666666666667E+01
32,2,-6.6666666666667E+01
33,2,-6.6666666666667E+01
34,2,-6.6666666666667E+01
367,2,-1.3333333333333E+02
368,2,-1.3333333333333E+02
369,2,-1.3333333333333E+02
370,2,-1.3333333333333E+02
371,2,-1.3333333333333E+02
372,2,-1.3333333333333E+02
373,2,-1.3333333333333E+02
374,2,-1.3333333333333E+02
375,2,-1.3333333333333E+02
376,2,-1.3333333333333E+02
1,2,-33.33333333333333
3,2,-33.33333333333333
26,2,-66.66666666666666
27,2,-66.66666666666666
28,2,-66.66666666666666
29,2,-66.66666666666666
30,2,-66.66666666666666
31,2,-66.66666666666666
32,2,-66.66666666666666
33,2,-66.66666666666666
34,2,-66.66666666666666
367,2,-133.33333333333331
368,2,-133.33333333333331
369,2,-133.33333333333331
370,2,-133.33333333333331
371,2,-133.33333333333331
372,2,-133.33333333333331
373,2,-133.33333333333331
374,2,-133.33333333333331
375,2,-133.33333333333331
376,2,-133.33333333333331
@@ -2702,8 +2702,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.21802 +11 (Git)
** written on --> Sat Jul 4 00:18:53 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:33:12 2023
** file name -->
** analysis name --> Analysis
**

View File

@@ -2581,70 +2581,70 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce1
** node loads on shape: SquareTube:Edge9
1,1,2.7777777777778E+03
236,1,2.7777777777778E+03
343,1,5.5555555555556E+03
344,1,5.5555555555556E+03
345,1,5.5555555555556E+03
346,1,5.5555555555556E+03
347,1,5.5555555555556E+03
1376,1,1.1111111111111E+04
1378,1,1.1111111111111E+04
1380,1,1.1111111111111E+04
1383,1,1.1111111111111E+04
1386,1,1.1111111111111E+04
1390,1,1.1111111111111E+04
1,1,2777.7777777777783
236,1,2777.7777777777783
343,1,5555.555555555557
344,1,5555.555555555557
345,1,5555.555555555557
346,1,5555.555555555557
347,1,5555.555555555557
1376,1,11111.111111111113
1378,1,11111.111111111113
1380,1,11111.111111111113
1383,1,11111.111111111113
1386,1,11111.111111111113
1390,1,11111.111111111113
** ConstraintForce2
** node loads on shape: SquareTube:Edge3
2,1,-2.7777777777778E+03
129,1,-2.7777777777778E+03
131,1,-5.5555555555556E+03
132,1,-5.5555555555556E+03
133,1,-5.5555555555556E+03
134,1,-5.5555555555556E+03
135,1,-5.5555555555556E+03
758,1,-1.1111111111111E+04
762,1,-1.1111111111111E+04
764,1,-1.1111111111111E+04
766,1,-1.1111111111111E+04
769,1,-1.1111111111111E+04
772,1,-1.1111111111111E+04
2,1,-2777.7777777777783
129,1,-2777.7777777777783
131,1,-5555.555555555557
132,1,-5555.555555555557
133,1,-5555.555555555557
134,1,-5555.555555555557
135,1,-5555.555555555557
758,1,-11111.111111111113
762,1,-11111.111111111113
764,1,-11111.111111111113
766,1,-11111.111111111113
769,1,-11111.111111111113
772,1,-11111.111111111113
** ConstraintForce3
** node loads on shape: SquareTube:Edge11
1,2,2.7777777777778E+03
2,2,2.7777777777778E+03
5,2,5.5555555555556E+03
6,2,5.5555555555556E+03
7,2,5.5555555555556E+03
8,2,5.5555555555556E+03
9,2,5.5555555555556E+03
429,2,1.1111111111111E+04
431,2,1.1111111111111E+04
437,2,1.1111111111111E+04
440,2,1.1111111111111E+04
443,2,1.1111111111111E+04
446,2,1.1111111111111E+04
1,2,2777.7777777777783
2,2,2777.7777777777783
5,2,5555.555555555557
6,2,5555.555555555557
7,2,5555.555555555557
8,2,5555.555555555557
9,2,5555.555555555557
429,2,11111.111111111113
431,2,11111.111111111113
437,2,11111.111111111113
440,2,11111.111111111113
443,2,11111.111111111113
446,2,11111.111111111113
** ConstraintForce4
** node loads on shape: SquareTube:Edge6
129,2,-2.7777777777778E+03
236,2,-2.7777777777778E+03
238,2,-5.5555555555556E+03
239,2,-5.5555555555556E+03
240,2,-5.5555555555556E+03
241,2,-5.5555555555556E+03
242,2,-5.5555555555556E+03
1067,2,-1.1111111111111E+04
1071,2,-1.1111111111111E+04
1073,2,-1.1111111111111E+04
1075,2,-1.1111111111111E+04
1078,2,-1.1111111111111E+04
1081,2,-1.1111111111111E+04
129,2,-2777.7777777777783
236,2,-2777.7777777777783
238,2,-5555.555555555557
239,2,-5555.555555555557
240,2,-5555.555555555557
241,2,-5555.555555555557
242,2,-5555.555555555557
1067,2,-11111.111111111113
1071,2,-11111.111111111113
1073,2,-11111.111111111113
1075,2,-11111.111111111113
1078,2,-11111.111111111113
1081,2,-11111.111111111113
@@ -2665,8 +2665,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.21972 +18 (Git)
** written on --> Fri Jul 17 22:12:38 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:35:14 2023
** file name -->
** analysis name --> Analysis
**

View File

@@ -2581,182 +2581,182 @@ ConstraintFixed,6
*CLOAD
** ConstraintForce1
** node load on shape: Forces:Vertex1
1,1,-2.7777800000000E+03
1,1,-2777.78
** node load on shape: Forces:Vertex14
236,1,-2.7777800000000E+03
236,1,-2777.78
** ConstraintForce2
** node load on shape: Forces:Vertex2
2,1,2.7777800000000E+03
2,1,2777.78
** node load on shape: Forces:Vertex8
129,1,2.7777800000000E+03
129,1,2777.78
** ConstraintForce3
** node load on shape: Forces:Vertex20
343,1,-5.5555560000000E+03
343,1,-5555.556
** node load on shape: Forces:Vertex21
344,1,-5.5555560000000E+03
344,1,-5555.556
** node load on shape: Forces:Vertex22
345,1,-5.5555560000000E+03
345,1,-5555.556
** node load on shape: Forces:Vertex23
346,1,-5.5555560000000E+03
346,1,-5555.556
** node load on shape: Forces:Vertex24
347,1,-5.5555560000000E+03
347,1,-5555.556
** ConstraintForce4
** node load on shape: Forces:Vertex9
131,1,5.5555560000000E+03
131,1,5555.556
** node load on shape: Forces:Vertex10
132,1,5.5555560000000E+03
132,1,5555.556
** node load on shape: Forces:Vertex11
133,1,5.5555560000000E+03
133,1,5555.556
** node load on shape: Forces:Vertex12
134,1,5.5555560000000E+03
134,1,5555.556
** node load on shape: Forces:Vertex13
135,1,5.5555560000000E+03
135,1,5555.556
** ConstraintForce5
** node load on shape: Forces:Vertex43
1376,1,-1.1111111666667E+04
1376,1,-11111.111666666666
** node load on shape: Forces:Vertex44
1378,1,-1.1111111666667E+04
1378,1,-11111.111666666666
** node load on shape: Forces:Vertex45
1380,1,-1.1111111666667E+04
1380,1,-11111.111666666666
** node load on shape: Forces:Vertex46
1383,1,-1.1111111666667E+04
1383,1,-11111.111666666666
** node load on shape: Forces:Vertex47
1386,1,-1.1111111666667E+04
1386,1,-11111.111666666666
** node load on shape: Forces:Vertex48
1390,1,-1.1111111666667E+04
1390,1,-11111.111666666666
** ConstraintForce6
** node load on shape: Forces:Vertex31
758,1,1.1111111666667E+04
758,1,11111.111666666666
** node load on shape: Forces:Vertex32
762,1,1.1111111666667E+04
762,1,11111.111666666666
** node load on shape: Forces:Vertex33
764,1,1.1111111666667E+04
764,1,11111.111666666666
** node load on shape: Forces:Vertex34
766,1,1.1111111666667E+04
766,1,11111.111666666666
** node load on shape: Forces:Vertex35
769,1,1.1111111666667E+04
769,1,11111.111666666666
** node load on shape: Forces:Vertex36
772,1,1.1111111666667E+04
772,1,11111.111666666666
** ConstraintForce7
** node load on shape: Forces:Vertex1
1,2,-2.7777800000000E+03
1,2,-2777.78
** node load on shape: Forces:Vertex2
2,2,-2.7777800000000E+03
2,2,-2777.78
** ConstraintForce8
** node load on shape: Forces:Vertex8
129,2,2.7777800000000E+03
129,2,2777.78
** node load on shape: Forces:Vertex14
236,2,2.7777800000000E+03
236,2,2777.78
** ConstraintForce9
** node load on shape: Forces:Vertex3
5,2,-5.5555560000000E+03
5,2,-5555.556
** node load on shape: Forces:Vertex4
6,2,-5.5555560000000E+03
6,2,-5555.556
** node load on shape: Forces:Vertex5
7,2,-5.5555560000000E+03
7,2,-5555.556
** node load on shape: Forces:Vertex6
8,2,-5.5555560000000E+03
8,2,-5555.556
** node load on shape: Forces:Vertex7
9,2,-5.5555560000000E+03
9,2,-5555.556
** ConstraintForce10
** node load on shape: Forces:Vertex15
238,2,5.5555560000000E+03
238,2,5555.556
** node load on shape: Forces:Vertex16
239,2,5.5555560000000E+03
239,2,5555.556
** node load on shape: Forces:Vertex17
240,2,5.5555560000000E+03
240,2,5555.556
** node load on shape: Forces:Vertex18
241,2,5.5555560000000E+03
241,2,5555.556
** node load on shape: Forces:Vertex19
242,2,5.5555560000000E+03
242,2,5555.556
** ConstraintForce11
** node load on shape: Forces:Vertex25
429,2,-1.1111111666667E+04
429,2,-11111.111666666666
** node load on shape: Forces:Vertex26
431,2,-1.1111111666667E+04
431,2,-11111.111666666666
** node load on shape: Forces:Vertex27
437,2,-1.1111111666667E+04
437,2,-11111.111666666666
** node load on shape: Forces:Vertex28
440,2,-1.1111111666667E+04
440,2,-11111.111666666666
** node load on shape: Forces:Vertex29
443,2,-1.1111111666667E+04
443,2,-11111.111666666666
** node load on shape: Forces:Vertex30
446,2,-1.1111111666667E+04
446,2,-11111.111666666666
** ConstraintForce12
** node load on shape: Forces:Vertex37
1067,2,1.1111111666667E+04
1067,2,11111.111666666666
** node load on shape: Forces:Vertex38
1071,2,1.1111111666667E+04
1071,2,11111.111666666666
** node load on shape: Forces:Vertex39
1073,2,1.1111111666667E+04
1073,2,11111.111666666666
** node load on shape: Forces:Vertex40
1075,2,1.1111111666667E+04
1075,2,11111.111666666666
** node load on shape: Forces:Vertex41
1078,2,1.1111111666667E+04
1078,2,11111.111666666666
** node load on shape: Forces:Vertex42
1081,2,1.1111111666667E+04
1081,2,11111.111666666666
@@ -2777,8 +2777,8 @@ RF
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.19.21972 +18 (Git)
** written on --> Fri Jul 17 22:14:04 2020
** written by --> FreeCAD 0.21.0
** written on --> Tue Mar 28 05:36:19 2023
** file name -->
** analysis name --> Analysis
**