diff --git a/src/Mod/Fem/App/FemConstraintPressure.cpp b/src/Mod/Fem/App/FemConstraintPressure.cpp index 5381846f52..e6a06c4efb 100644 --- a/src/Mod/Fem/App/FemConstraintPressure.cpp +++ b/src/Mod/Fem/App/FemConstraintPressure.cpp @@ -58,6 +58,21 @@ const char* ConstraintPressure::getViewProviderName() const return "FemGui::ViewProviderFemConstraintPressure"; } +void ConstraintPressure::handleChangedPropertyType(Base::XMLReader& reader, + const char* TypeName, + App::Property* prop) +{ + // property Pressure had App::PropertyFloat and was changed to App::PropertyPressure + if (prop == &Pressure && strcmp(TypeName, "App::PropertyFloat") == 0) { + App::PropertyFloat PressureProperty; + // restore the PropertyFloat to be able to set its value + PressureProperty.Restore(reader); + // the old implementation or pressure stored the value as MPa + // therefore we must convert the value with a factor 1000 + Pressure.setValue(PressureProperty.getValue() * 1000.0); + } +} + void ConstraintPressure::onChanged(const App::Property* prop) { Constraint::onChanged(prop); diff --git a/src/Mod/Fem/App/FemConstraintPressure.h b/src/Mod/Fem/App/FemConstraintPressure.h index 7ebb3ca754..1bb67410f6 100644 --- a/src/Mod/Fem/App/FemConstraintPressure.h +++ b/src/Mod/Fem/App/FemConstraintPressure.h @@ -37,7 +37,7 @@ class FemExport ConstraintPressure: public Fem::Constraint public: ConstraintPressure(); - App::PropertyFloat Pressure; + App::PropertyPressure Pressure; App::PropertyBool Reversed; App::PropertyVectorList Points; App::PropertyVectorList Normals; @@ -49,6 +49,8 @@ public: const char* getViewProviderName() const override; protected: + void + handleChangedPropertyType(Base::XMLReader& reader, const char* TypeName, App::Property* prop); void onChanged(const App::Property* prop) override; }; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp b/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp index dec2df4f65..7cfe607d7f 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp @@ -52,6 +52,33 @@ TaskFemConstraintPressure::TaskFemConstraintPressure( ui->setupUi(proxy); QMetaObject::connectSlotsByName(this); + this->groupLayout()->addWidget(proxy); + + // Get the feature data + Fem::ConstraintPressure* pcConstraint = + static_cast(ConstraintView->getObject()); + + std::vector Objects = pcConstraint->References.getValues(); + std::vector SubElements = pcConstraint->References.getSubValues(); + + // Fill data into dialog elements + ui->if_pressure->setUnit(pcConstraint->Pressure.getUnit()); + ui->if_pressure->setMinimum(0); + ui->if_pressure->setMaximum(FLOAT_MAX); + ui->if_pressure->setValue(pcConstraint->Pressure.getQuantityValue()); + ui->if_pressure->bind(pcConstraint->Pressure); + + bool reversed = pcConstraint->Reversed.getValue(); + ui->checkBoxReverse->setChecked(reversed); + + ui->lw_references->clear(); + for (std::size_t i = 0; i < Objects.size(); i++) { + ui->lw_references->addItem(makeRefText(Objects[i], SubElements[i])); + } + if (!Objects.empty()) { + ui->lw_references->setCurrentRow(0, QItemSelectionModel::ClearAndSelect); + } + // create a context menu for the listview of the references createDeleteAction(ui->lw_references); connect(deleteAction, @@ -72,37 +99,9 @@ TaskFemConstraintPressure::TaskFemConstraintPressure( this, &TaskFemConstraintPressure::onCheckReverse); - this->groupLayout()->addWidget(proxy); - - /* Note: */ - // Get the feature data - Fem::ConstraintPressure* pcConstraint = - static_cast(ConstraintView->getObject()); - - std::vector Objects = pcConstraint->References.getValues(); - std::vector SubElements = pcConstraint->References.getSubValues(); - - // Fill data into dialog elements - ui->if_pressure->setMinimum(0); - ui->if_pressure->setMaximum(FLOAT_MAX); - Base::Quantity p = - Base::Quantity(1000 * (pcConstraint->Pressure.getValue()), Base::Unit::Stress); - ui->if_pressure->setValue(p); - bool reversed = pcConstraint->Reversed.getValue(); - ui->checkBoxReverse->setChecked(reversed); - /* */ - - ui->lw_references->clear(); - for (std::size_t i = 0; i < Objects.size(); i++) { - ui->lw_references->addItem(makeRefText(Objects[i], SubElements[i])); - } - if (!Objects.empty()) { - ui->lw_references->setCurrentRow(0, QItemSelectionModel::ClearAndSelect); - } - // Selection buttons - buttonGroup->addButton(ui->btnAdd, (int)SelectionChangeModes::refAdd); - buttonGroup->addButton(ui->btnRemove, (int)SelectionChangeModes::refRemove); + buttonGroup->addButton(ui->btnAdd, static_cast(SelectionChangeModes::refAdd)); + buttonGroup->addButton(ui->btnRemove, static_cast(SelectionChangeModes::refRemove)); updateUI(); } @@ -252,15 +251,12 @@ const std::string TaskFemConstraintPressure::getReferences() const return TaskFemConstraint::getReferences(items); } -/* Note: */ -double TaskFemConstraintPressure::get_Pressure() const +std::string TaskFemConstraintPressure::getPressure() const { - Base::Quantity pressure = ui->if_pressure->getQuantity(); - double pressure_in_MPa = pressure.getValueAs(Base::Quantity::MegaPascal); - return pressure_in_MPa; + return ui->if_pressure->value().getSafeUserString().toStdString(); } -bool TaskFemConstraintPressure::get_Reverse() const +bool TaskFemConstraintPressure::getReverse() const { return ui->checkBoxReverse->isChecked(); } @@ -323,13 +319,13 @@ bool TaskDlgFemConstraintPressure::accept() try { Gui::Command::doCommand(Gui::Command::Doc, - "App.ActiveDocument.%s.Pressure = %f", + "App.ActiveDocument.%s.Pressure = \"%s\"", name.c_str(), - parameterPressure->get_Pressure()); + parameterPressure->getPressure().c_str()); Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.Reversed = %s", name.c_str(), - parameterPressure->get_Reverse() ? "True" : "False"); + parameterPressure->getReverse() ? "True" : "False"); std::string scale = parameterPressure->getScale(); // OvG: determine modified scale Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.Scale = %s", diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPressure.h b/src/Mod/Fem/Gui/TaskFemConstraintPressure.h index d540829388..c312290534 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPressure.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintPressure.h @@ -46,8 +46,8 @@ public: QWidget* parent = nullptr); ~TaskFemConstraintPressure() override; const std::string getReferences() const override; - double get_Pressure() const; - bool get_Reverse() const; + std::string getPressure() const; + bool getReverse() const; private Q_SLOTS: void onReferenceDeleted(); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPressure.ui b/src/Mod/Fem/Gui/TaskFemConstraintPressure.ui index fbe97414c9..b3e9ff5200 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPressure.ui +++ b/src/Mod/Fem/Gui/TaskFemConstraintPressure.ui @@ -70,12 +70,12 @@ - - - 0 MPa - + - MPa + + + + 0.000000000000000 @@ -92,9 +92,9 @@ - Gui::InputField - QLineEdit -
Gui/InputField.h
+ Gui::QuantitySpinBox + QWidget +
Gui/QuantitySpinBox.h
diff --git a/src/Mod/Fem/femexamples/boxanalysis_static.py b/src/Mod/Fem/femexamples/boxanalysis_static.py index 5f78080494..cb1651f4b7 100644 --- a/src/Mod/Fem/femexamples/boxanalysis_static.py +++ b/src/Mod/Fem/femexamples/boxanalysis_static.py @@ -111,7 +111,7 @@ def setup(doc=None, solvertype="ccxtools"): # constraint pressure con_pressure = ObjectsFem.makeConstraintPressure(doc, name="FemConstraintPressure") con_pressure.References = [(geom_obj, "Face2")] - con_pressure.Pressure = 1000.0 + con_pressure.Pressure = "1000.0 MPa" con_pressure.Reversed = False analysis.addObject(con_pressure) diff --git a/src/Mod/Fem/femexamples/constraint_contact_solid_solid.py b/src/Mod/Fem/femexamples/constraint_contact_solid_solid.py index bded5f11c4..c3efe9b189 100644 --- a/src/Mod/Fem/femexamples/constraint_contact_solid_solid.py +++ b/src/Mod/Fem/femexamples/constraint_contact_solid_solid.py @@ -167,7 +167,7 @@ def setup(doc=None, solvertype="ccxtools"): # constraint pressure con_pressure = ObjectsFem.makeConstraintPressure(doc, "ConstraintPressure") con_pressure.References = [(geom_obj, "Face10")] - con_pressure.Pressure = 100.0 # Pa ? = 100 Mpa ? + con_pressure.Pressure = "100.0 MPa" con_pressure.Reversed = False analysis.addObject(con_pressure) diff --git a/src/Mod/Fem/femexamples/constraint_section_print.py b/src/Mod/Fem/femexamples/constraint_section_print.py index ace65d6365..4ccf5da6e9 100644 --- a/src/Mod/Fem/femexamples/constraint_section_print.py +++ b/src/Mod/Fem/femexamples/constraint_section_print.py @@ -257,7 +257,7 @@ def setup(doc=None, solvertype="ccxtools"): # constraint pressure con_pressure = ObjectsFem.makeConstraintPressure(doc, "ConstraintPressure") con_pressure.References = [(geom_obj, "Face1")] - con_pressure.Pressure = 100.0 + con_pressure.Pressure = "100.0 MPa" con_pressure.Reversed = False analysis.addObject(con_pressure) diff --git a/src/Mod/Fem/femexamples/constraint_transform_beam_hinged.py b/src/Mod/Fem/femexamples/constraint_transform_beam_hinged.py index 1d8bd5cbb7..22c9d136b8 100644 --- a/src/Mod/Fem/femexamples/constraint_transform_beam_hinged.py +++ b/src/Mod/Fem/femexamples/constraint_transform_beam_hinged.py @@ -147,7 +147,7 @@ def setup(doc=None, solvertype="ccxtools"): # constraint pressure con_pressure = ObjectsFem.makeConstraintPressure(doc, name="FemConstraintPressure") con_pressure.References = [(geom_obj, "Face8")] - con_pressure.Pressure = 10.0 + con_pressure.Pressure = "10.0 MPa" con_pressure.Reversed = False analysis.addObject(con_pressure) diff --git a/src/Mod/Fem/femexamples/material_multiple_tensionrod_twoboxes.py b/src/Mod/Fem/femexamples/material_multiple_tensionrod_twoboxes.py index f60fa1f4ba..d0a252f49e 100644 --- a/src/Mod/Fem/femexamples/material_multiple_tensionrod_twoboxes.py +++ b/src/Mod/Fem/femexamples/material_multiple_tensionrod_twoboxes.py @@ -153,7 +153,7 @@ def setup(doc=None, solvertype="ccxtools"): # constraint pressure con_pressure = ObjectsFem.makeConstraintPressure(doc, "ConstraintPressure") con_pressure.References = [(geom_obj, "Face11")] - con_pressure.Pressure = 1000.0 + con_pressure.Pressure = "1000.0 MPa" con_pressure.Reversed = False analysis.addObject(con_pressure) diff --git a/src/Mod/Fem/femexamples/material_nl_platewithhole.py b/src/Mod/Fem/femexamples/material_nl_platewithhole.py index 9a727b7c50..1546539b74 100644 --- a/src/Mod/Fem/femexamples/material_nl_platewithhole.py +++ b/src/Mod/Fem/femexamples/material_nl_platewithhole.py @@ -161,7 +161,7 @@ def setup(doc=None, solvertype="ccxtools"): # pressure constraint con_pressure = ObjectsFem.makeConstraintPressure(doc, "ConstraintPressure") con_pressure.References = [(geom_obj, "Face2")] - con_pressure.Pressure = 130.0 + con_pressure.Pressure = "130.0 MPa" con_pressure.Reversed = True analysis.addObject(con_pressure) diff --git a/src/Mod/Fem/femobjects/constraint_initialpressure.py b/src/Mod/Fem/femobjects/constraint_initialpressure.py index 2b2914eb4d..c28297fe55 100644 --- a/src/Mod/Fem/femobjects/constraint_initialpressure.py +++ b/src/Mod/Fem/femobjects/constraint_initialpressure.py @@ -51,5 +51,5 @@ class ConstraintInitialPressure(base_fempythonobject.BaseFemPythonObject): "Parameter", "Initial Pressure" ) - # App::PropertyPressure is in kPa and we initialize 1 bar - obj.Pressure = 100 + # we initialize 1 bar + obj.Pressure = "100 kPa" diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py b/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py index e1bb23b696..18aee620b0 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py @@ -25,6 +25,7 @@ __title__ = "FreeCAD FEM calculix constraint pressure" __author__ = "Bernd Hahnebach" __url__ = "https://www.freecad.org" +import FreeCAD def get_analysis_types(): return ["buckling", "static", "thermomech"] @@ -47,7 +48,9 @@ def write_meshdata_constraint(f, femobj, prs_obj, ccxwriter): # floats read from ccx should use {:.13G}, see comment in writer module rev = -1 if prs_obj.Reversed else 1 - press_rev = rev * prs_obj.Pressure + # the pressure has to be output in MPa + pressure_quantity = FreeCAD.Units.Quantity(prs_obj.Pressure.getValueAs("MPa")) + press_rev = rev * pressure_quantity f.write("*DLOAD\n") for ref_shape in femobj["PressureFaces"]: @@ -57,12 +60,12 @@ def write_meshdata_constraint(f, femobj, prs_obj, ccxwriter): f.write("** " + ref_shape[0] + "\n") for face, fno in ref_shape[1]: if fno > 0: # solid mesh face - f.write("{},P{},{:.13G}\n".format(face, fno, press_rev)) + f.write("{},P{},{}\n".format(face, fno, press_rev)) # on shell mesh face: fno == 0 # normal of element face == face normal elif fno == 0: - f.write("{},P,{:.13G}\n".format(face, press_rev)) + f.write("{},P,{}\n".format(face, press_rev)) # on shell mesh face: fno == -1 # normal of element face opposite direction face normal elif fno == -1: - f.write("{},P,{:.13G}\n".format(face, -1 * press_rev)) + f.write("{},P,{}\n".format(face, -1 * press_rev)) diff --git a/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py b/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py index ef50ec7da6..295a9a9a38 100644 --- a/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py +++ b/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py @@ -82,7 +82,7 @@ class DeformationWriter: for obj in self.write.getMember("Fem::ConstraintPressure"): if obj.References: for name in obj.References[0][1]: - pressure = self.write.getFromUi(obj.Pressure, "MPa", "M/(L*T^2)") + pressure = float(obj.Pressure.getValueAs("Pa")) if not obj.Reversed: pressure *= -1 self.write.boundary(name, "Normal Force", pressure) diff --git a/src/Mod/Fem/femsolver/elmer/equations/elasticity_writer.py b/src/Mod/Fem/femsolver/elmer/equations/elasticity_writer.py index 2e52062b32..60c5327504 100644 --- a/src/Mod/Fem/femsolver/elmer/equations/elasticity_writer.py +++ b/src/Mod/Fem/femsolver/elmer/equations/elasticity_writer.py @@ -298,7 +298,7 @@ class ElasticityWriter: for obj in self.write.getMember("Fem::ConstraintPressure"): if obj.References: for name in obj.References[0][1]: - pressure = self.write.getFromUi(obj.Pressure, "MPa", "M/(L*T^2)") + pressure = float(obj.Pressure.getValueAs("Pa")) if not obj.Reversed: pressure *= -1 self.write.boundary(name, "Normal Force", pressure) diff --git a/src/Mod/Fem/femsolver/elmer/equations/flow_writer.py b/src/Mod/Fem/femsolver/elmer/equations/flow_writer.py index 8649ba4a84..c19451bb4b 100644 --- a/src/Mod/Fem/femsolver/elmer/equations/flow_writer.py +++ b/src/Mod/Fem/femsolver/elmer/equations/flow_writer.py @@ -261,7 +261,7 @@ class Flowwriter: for obj in self.write.getMember("Fem::ConstraintPressure"): if obj.References: for name in obj.References[0][1]: - pressure = self.write.getFromUi(obj.Pressure, "MPa", "M/(L*T^2)") + pressure = float(obj.Pressure.getValueAs("Pa")) if obj.Reversed: pressure *= -1 self.write.boundary(name, "External Pressure", pressure) diff --git a/src/Mod/Fem/femtest/data/calculix/box_static.FCStd b/src/Mod/Fem/femtest/data/calculix/box_static.FCStd index 79d32f7b70..a4d7ac06e0 100644 Binary files a/src/Mod/Fem/femtest/data/calculix/box_static.FCStd and b/src/Mod/Fem/femtest/data/calculix/box_static.FCStd differ diff --git a/src/Mod/Fem/femtest/data/calculix/box_static.inp b/src/Mod/Fem/femtest/data/calculix/box_static.inp index f5ad252b4c..4cf403b43c 100644 --- a/src/Mod/Fem/femtest/data/calculix/box_static.inp +++ b/src/Mod/Fem/femtest/data/calculix/box_static.inp @@ -556,22 +556,22 @@ FemConstraintFixed,3 ** FemConstraintPressure *DLOAD ** FemConstraintPressure: face load -3,P1,1000 -6,P3,1000 -9,P2,1000 -36,P1,1000 -38,P1,1000 -56,P1,1000 -61,P3,1000 -67,P2,1000 -68,P3,1000 -75,P2,1000 -76,P4,1000 -78,P4,1000 -79,P2,1000 -90,P3,1000 -105,P3,1000 -125,P3,1000 +3,P1,1000.0 +6,P3,1000.0 +9,P2,1000.0 +36,P1,1000.0 +38,P1,1000.0 +56,P1,1000.0 +61,P3,1000.0 +67,P2,1000.0 +68,P3,1000.0 +75,P2,1000.0 +76,P4,1000.0 +78,P4,1000.0 +79,P2,1000.0 +90,P3,1000.0 +105,P3,1000.0 +125,P3,1000.0 *********************************************************** ** Outputs --> frd file @@ -590,8 +590,8 @@ RF *********************************************************** ** CalculiX Input file -** written by --> FreeCAD 0.17.9749 (Git) -** written on --> Sun Jan 22 14:28:56 2017 +** written by --> FreeCAD 0.21.0 +** written on --> Tue Mar 28 06:53:21 2023 ** file name --> ** analysis name --> Analysis ** diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.FCStd b/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.FCStd index 26af91cb95..ef4a1a099e 100644 Binary files a/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.FCStd and b/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.FCStd differ diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.inp b/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.inp index 61e7a9a212..883a37b530 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_contact_solid_solid.inp @@ -4346,20 +4346,163 @@ Evolumes 22, 91, 92, -93, -94, -95, -96, -97, 98, 99, -164, -165, -166, -167, -168, -274, -366, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +275, +276, +277, +278, +279, +280, +281, +282, +283, +284, +285, +286, +287, +288, +289, +290, +291, +292, +293, +294, +295, +296, +297, +298, +299, +300, +301, +302, +303, +304, +305, +306, +307, +308, +309, +310, +311, +312, +313, +314, +315, +316, +317, +318, +319, +320, +321, +322, +323, +324, +325, +326, +327, +328, +329, +330, +331, +332, +333, +334, +335, +336, +337, +338, +339, +340, +341, +342, +343, +344, +345, +346, +347, +348, +349, +350, +351, +352, +353, +354, +355, +356, +357, +358, +359, +360, +361, +362, +363, +364, +365, 559, 560, 561, @@ -4381,21 +4524,75 @@ Evolumes 649, 650, 651, -652, -653, -654, -655, -656, -657, 658, 659, 660, -727, -728, -729, -730, -731, -732, +661, +662, +663, +664, +665, +666, +667, +668, +669, +670, +671, +672, +673, +674, +675, +676, +677, +678, +679, +680, +681, +682, +683, +684, +685, +686, +687, +688, +689, +690, +691, +692, +693, +694, +695, +696, +697, +698, +699, +700, +701, +702, +703, +704, +705, +706, +707, +708, +709, +710, +711, +712, +713, +714, +715, +716, +717, +718, +719, +720, +721, +722, +723, +724, +725, +726, 733, 734, 735, @@ -4408,24 +4605,348 @@ Evolumes 742, 743, 744, -1210, -1211, -1212, -1213, -1214, -1215, -1216, -1217, -1218, -1561, -1562, -1563, -1564, -1565, -1566, -1567, -1568, -1569, +1219, +1220, +1221, +1222, +1223, +1224, +1225, +1226, +1227, +1228, +1229, +1230, +1231, +1232, +1233, +1234, +1235, +1236, +1237, +1238, +1239, +1240, +1241, +1242, +1243, +1244, +1245, +1246, +1247, +1248, +1249, +1250, +1251, +1252, +1253, +1254, +1255, +1256, +1257, +1258, +1259, +1260, +1261, +1262, +1263, +1264, +1265, +1266, +1267, +1268, +1269, +1270, +1271, +1272, +1273, +1274, +1275, +1276, +1277, +1278, +1279, +1280, +1281, +1282, +1283, +1284, +1285, +1286, +1287, +1288, +1289, +1290, +1291, +1292, +1293, +1294, +1295, +1296, +1297, +1298, +1299, +1300, +1301, +1302, +1303, +1304, +1305, +1306, +1307, +1308, +1309, +1310, +1311, +1312, +1313, +1314, +1315, +1316, +1317, +1318, +1319, +1320, +1321, +1322, +1323, +1324, +1325, +1326, +1327, +1328, +1329, +1330, +1331, +1332, +1333, +1334, +1335, +1336, +1337, +1338, +1339, +1340, +1341, +1342, +1343, +1344, +1345, +1346, +1347, +1348, +1349, +1350, +1351, +1352, +1353, +1354, +1355, +1356, +1357, +1358, +1359, +1360, +1361, +1362, +1363, +1364, +1365, +1366, +1367, +1368, +1369, +1370, +1371, +1372, +1373, +1374, +1375, +1376, +1377, +1378, +1379, +1380, +1381, +1382, +1383, +1384, +1385, +1386, +1387, +1388, +1389, +1390, +1391, +1392, +1393, +1394, +1395, +1396, +1397, +1398, +1399, +1400, +1401, +1402, +1403, +1404, +1405, +1406, +1407, +1408, +1409, +1410, +1411, +1412, +1413, +1414, +1415, +1416, +1417, +1418, +1419, +1420, +1421, +1422, +1423, +1424, +1425, +1426, +1427, +1428, +1429, +1430, +1431, +1432, +1433, +1434, +1435, +1436, +1437, +1438, +1439, +1440, +1441, +1442, +1443, +1444, +1445, +1446, +1447, +1448, +1449, +1450, +1451, +1452, +1453, +1454, +1455, +1456, +1457, +1458, +1459, +1460, +1461, +1462, +1463, +1464, +1465, +1466, +1467, +1468, +1469, +1470, +1471, +1472, +1473, +1474, +1475, +1476, +1477, +1478, +1479, +1480, +1481, +1482, +1483, +1484, +1485, +1486, +1487, +1488, +1489, +1490, +1491, +1492, +1493, +1494, +1495, +1496, +1497, +1498, +1499, +1500, +1501, +1502, +1503, +1504, +1505, +1506, +1507, +1508, +1509, +1510, +1511, +1512, +1513, +1514, +1515, +1516, +1517, +1518, +1519, +1520, +1521, +1522, +1523, +1524, +1525, +1526, +1527, +1528, +1529, +1530, +1531, +1532, +1533, +1534, +1535, +1536, +1537, +1538, +1539, +1540, +1541, +1542, +1543, +1544, +1545, +1546, +1547, +1548, +1549, +1550, +1551, +1552, +1553, +1554, +1555, +1556, +1557, +1558, +1559, +1560, *********************************************************** ** constraints contact surface sets @@ -5055,7 +5576,7 @@ Evolumes DEPConstraintContact,INDConstraintContact *SURFACE INTERACTION, NAME=INTConstraintContact *SURFACE BEHAVIOR,PRESSURE-OVERCLOSURE=LINEAR -1000000.0 +1000000 *********************************************************** ** At least one step is needed to run an CalculiX analysis of FreeCAD @@ -5077,258 +5598,15 @@ ConstraintFixed,3 ** ConstraintPressure *DLOAD ** ConstraintPressure: face load -1322,P2,100.0 -1516,P1,100.0 -1701,P1,100.0 -1727,P1,100.0 -1728,P1,100.0 -1729,P1,100.0 -1733,P3,100.0 -1745,P2,100.0 -1746,P3,100.0 -1751,P3,100.0 -1754,P2,100.0 -1756,P1,100.0 -1757,P4,100.0 -1759,P4,100.0 -1761,P1,100.0 -1762,P1,100.0 -1763,P2,100.0 -1765,P1,100.0 -1773,P2,100.0 -1775,P1,100.0 -1778,P2,100.0 -1779,P2,100.0 -1781,P1,100.0 -1782,P4,100.0 -1786,P3,100.0 -1803,P2,100.0 -1804,P2,100.0 -1805,P2,100.0 -1806,P4,100.0 -1807,P2,100.0 -1809,P3,100.0 -1810,P4,100.0 -1812,P4,100.0 -1813,P3,100.0 -1815,P1,100.0 -1817,P2,100.0 -1821,P4,100.0 -1824,P3,100.0 -1825,P3,100.0 -1826,P2,100.0 -1828,P4,100.0 -1830,P2,100.0 -1834,P1,100.0 -1836,P2,100.0 -1839,P1,100.0 -1840,P3,100.0 -1842,P1,100.0 -1846,P2,100.0 -1847,P4,100.0 -1848,P2,100.0 -1852,P4,100.0 -1854,P1,100.0 -1866,P4,100.0 -1869,P4,100.0 -1875,P3,100.0 -1881,P2,100.0 -1882,P1,100.0 -1883,P2,100.0 -1885,P3,100.0 -1886,P3,100.0 -1888,P3,100.0 -1895,P1,100.0 -1896,P2,100.0 -1897,P2,100.0 -1902,P2,100.0 -1905,P1,100.0 -1914,P2,100.0 -1921,P4,100.0 -1933,P2,100.0 -1935,P2,100.0 -1940,P3,100.0 -1941,P2,100.0 -1946,P1,100.0 -1947,P3,100.0 -1953,P1,100.0 -1958,P3,100.0 -1961,P3,100.0 -1966,P2,100.0 -1976,P3,100.0 -1983,P2,100.0 -1989,P2,100.0 -1993,P1,100.0 -1994,P4,100.0 -1996,P4,100.0 -1998,P2,100.0 -2001,P2,100.0 -2008,P1,100.0 -2010,P3,100.0 -2018,P4,100.0 -2024,P1,100.0 -2030,P4,100.0 -2031,P4,100.0 -2042,P3,100.0 -2044,P1,100.0 -2046,P4,100.0 -2047,P2,100.0 -2056,P4,100.0 -2057,P2,100.0 -2071,P1,100.0 -2075,P1,100.0 -2076,P4,100.0 -2079,P3,100.0 -2080,P1,100.0 -2081,P1,100.0 -2082,P2,100.0 -2083,P3,100.0 -2088,P1,100.0 -2089,P2,100.0 -2090,P2,100.0 -2091,P2,100.0 -2093,P2,100.0 -2107,P3,100.0 -2108,P2,100.0 -2116,P4,100.0 -2119,P4,100.0 -2122,P1,100.0 -2125,P3,100.0 -2128,P4,100.0 -2135,P1,100.0 -2136,P3,100.0 -2140,P3,100.0 -2141,P4,100.0 -2146,P1,100.0 -2147,P2,100.0 -2151,P3,100.0 -2152,P4,100.0 -2154,P4,100.0 -2155,P3,100.0 -2156,P3,100.0 -2160,P3,100.0 -2164,P3,100.0 -2166,P4,100.0 -2167,P1,100.0 -2168,P2,100.0 -2169,P3,100.0 -2171,P2,100.0 -2172,P1,100.0 -2174,P4,100.0 -2176,P2,100.0 -2179,P4,100.0 -2183,P1,100.0 -2189,P3,100.0 -2191,P1,100.0 -2192,P4,100.0 -2197,P3,100.0 -2198,P3,100.0 -2200,P1,100.0 -2204,P2,100.0 -2206,P2,100.0 -2211,P3,100.0 -2216,P2,100.0 -2218,P3,100.0 -2220,P2,100.0 -2222,P4,100.0 -2228,P4,100.0 -2229,P1,100.0 -2231,P1,100.0 -2235,P2,100.0 -2238,P4,100.0 -2241,P2,100.0 -2246,P1,100.0 -2247,P2,100.0 -2250,P1,100.0 -2251,P2,100.0 -2259,P2,100.0 -2262,P2,100.0 -2264,P3,100.0 -2266,P4,100.0 -2268,P4,100.0 -2269,P2,100.0 -2272,P4,100.0 -2273,P4,100.0 -2276,P3,100.0 -2278,P4,100.0 -2279,P1,100.0 -2286,P1,100.0 -2290,P3,100.0 -2292,P3,100.0 -2296,P3,100.0 -2307,P3,100.0 -2310,P4,100.0 -2312,P3,100.0 -2314,P1,100.0 -2318,P1,100.0 -2321,P3,100.0 -2323,P2,100.0 -2325,P4,100.0 -2327,P1,100.0 -2336,P4,100.0 -2344,P2,100.0 -2346,P4,100.0 -2347,P3,100.0 -2349,P2,100.0 -2355,P2,100.0 -2358,P3,100.0 -2361,P2,100.0 -2363,P4,100.0 -2369,P3,100.0 -2372,P2,100.0 -2380,P4,100.0 -2390,P1,100.0 -2392,P4,100.0 -2396,P4,100.0 -2397,P4,100.0 -2400,P3,100.0 -2404,P3,100.0 -2406,P2,100.0 -2408,P3,100.0 -2425,P1,100.0 -2430,P2,100.0 -2436,P2,100.0 -2439,P2,100.0 -2442,P3,100.0 -2451,P1,100.0 -2452,P3,100.0 -2462,P1,100.0 -2464,P1,100.0 -2472,P1,100.0 -2477,P4,100.0 -2478,P1,100.0 -2482,P3,100.0 -2488,P3,100.0 -2491,P1,100.0 -2493,P1,100.0 -2496,P2,100.0 -2499,P1,100.0 -2505,P3,100.0 -2512,P2,100.0 -2514,P3,100.0 -2521,P1,100.0 -2526,P4,100.0 -2530,P1,100.0 -2534,P2,100.0 -2536,P3,100.0 -2537,P4,100.0 -2542,P1,100.0 -2546,P2,100.0 -2548,P4,100.0 -2550,P3,100.0 -2552,P4,100.0 -2556,P3,100.0 -2557,P2,100.0 -2559,P2,100.0 -2560,P2,100.0 -2570,P1,100.0 -2580,P2,100.0 -2584,P2,100.0 -2585,P1,100.0 -2586,P1,100.0 -2589,P1,100.0 -2592,P3,100.0 -2596,P2,100.0 +1733,P4,100.0 +1793,P1,100.0 +1981,P4,100.0 +2040,P1,100.0 +2304,P2,100.0 +2380,P3,100.0 +2463,P2,100.0 +2470,P2,100.0 +2547,P1,100.0 *********************************************************** ** Outputs --> frd file @@ -5347,8 +5625,8 @@ RF *********************************************************** ** CalculiX Input file -** written by --> FreeCAD 0.19.19463 (Git) -** written on --> Mon Feb 3 23:28:02 2020 +** written by --> FreeCAD 0.21.0 +** written on --> Tue Mar 28 06:51:00 2023 ** file name --> ** analysis name --> Analysis ** diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_sectionprint.inp b/src/Mod/Fem/femtest/data/calculix/constraint_sectionprint.inp index 253c38210c..e8ff5f13c9 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_sectionprint.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_sectionprint.inp @@ -3425,24 +3425,24 @@ SOF, SOM, SOAREA ** ConstraintPressure *DLOAD ** ConstraintPressure: face load -846,P3,100 -861,P1,100 -875,P4,100 -883,P3,100 -887,P1,100 -888,P1,100 -903,P1,100 -929,P4,100 -933,P3,100 -936,P1,100 -937,P1,100 -940,P1,100 -941,P1,100 -946,P4,100 -949,P2,100 -951,P4,100 -954,P3,100 -955,P4,100 +846,P3,100.0 +861,P1,100.0 +875,P4,100.0 +883,P3,100.0 +887,P1,100.0 +888,P1,100.0 +903,P1,100.0 +929,P4,100.0 +933,P3,100.0 +936,P1,100.0 +937,P1,100.0 +940,P1,100.0 +941,P1,100.0 +946,P4,100.0 +949,P2,100.0 +951,P4,100.0 +954,P3,100.0 +955,P4,100.0 *********************************************************** ** Outputs --> frd file @@ -3461,8 +3461,8 @@ RF *********************************************************** ** CalculiX Input file -** written by --> FreeCAD 0.19.21759 (Git) -** written on --> Wed Jun 24 09:14:56 2020 +** written by --> FreeCAD 0.21.0 +** written on --> Tue Mar 28 06:49:11 2023 ** file name --> ** analysis name --> Analysis ** diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_transform_beam_hinged.inp b/src/Mod/Fem/femtest/data/calculix/constraint_transform_beam_hinged.inp index 92bd75d962..a81cedf777 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_transform_beam_hinged.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_transform_beam_hinged.inp @@ -3655,124 +3655,124 @@ FemConstraintDisplacment,1 ** FemConstraintPressure *DLOAD ** FemConstraintPressure: face load -1384,P3,10 -1394,P2,10 -1397,P2,10 -1399,P1,10 -1400,P1,10 -1402,P2,10 -1404,P2,10 -1415,P4,10 -1418,P1,10 -1419,P2,10 -1423,P2,10 -1428,P2,10 -1429,P1,10 -1432,P4,10 -1433,P3,10 -1437,P4,10 -1438,P2,10 -1441,P2,10 -1442,P3,10 -1443,P3,10 -1448,P4,10 -1451,P4,10 -1455,P2,10 -1457,P4,10 -1458,P1,10 -1461,P3,10 -1466,P3,10 -1467,P3,10 -1475,P1,10 -1476,P1,10 -1484,P1,10 -1500,P1,10 -1501,P2,10 -1503,P1,10 -1504,P1,10 -1507,P2,10 -1508,P1,10 -1548,P1,10 -1549,P4,10 -1550,P3,10 -1552,P4,10 -1554,P1,10 -1555,P1,10 -1571,P3,10 -1579,P2,10 -1580,P1,10 -1581,P4,10 -1589,P3,10 -1590,P3,10 -1661,P1,10 -1663,P3,10 -1675,P1,10 -1676,P4,10 -1685,P4,10 -1686,P2,10 -1687,P3,10 -1707,P4,10 -1713,P1,10 -1718,P4,10 -1719,P2,10 -1721,P2,10 -1728,P1,10 -1730,P4,10 -1733,P3,10 -1737,P1,10 -1740,P4,10 -1742,P3,10 -1743,P1,10 -1744,P1,10 -1747,P1,10 -1750,P4,10 -1751,P4,10 -1759,P1,10 -1760,P3,10 -1761,P4,10 -1762,P2,10 -1767,P3,10 -1770,P1,10 -1771,P1,10 -1776,P3,10 -1785,P4,10 -1786,P1,10 -1804,P4,10 -1818,P1,10 -1820,P2,10 -1823,P3,10 -1824,P4,10 -1832,P1,10 -1833,P4,10 -1838,P3,10 -1848,P1,10 -1849,P3,10 -1850,P2,10 -1851,P2,10 -1852,P4,10 -1860,P4,10 -1861,P1,10 -1864,P3,10 -1874,P4,10 -1881,P3,10 -1892,P2,10 -1893,P2,10 -1900,P1,10 -1901,P3,10 -1902,P1,10 -1903,P2,10 -1907,P3,10 -1909,P1,10 -1918,P4,10 -1919,P2,10 -1922,P3,10 -1928,P3,10 -1934,P4,10 -1935,P4,10 -1943,P3,10 -1976,P4,10 -1982,P2,10 -1984,P4,10 +1384,P3,10.0 +1394,P2,10.0 +1397,P2,10.0 +1399,P1,10.0 +1400,P1,10.0 +1402,P2,10.0 +1404,P2,10.0 +1415,P4,10.0 +1418,P1,10.0 +1419,P2,10.0 +1423,P2,10.0 +1428,P2,10.0 +1429,P1,10.0 +1432,P4,10.0 +1433,P3,10.0 +1437,P4,10.0 +1438,P2,10.0 +1441,P2,10.0 +1442,P3,10.0 +1443,P3,10.0 +1448,P4,10.0 +1451,P4,10.0 +1455,P2,10.0 +1457,P4,10.0 +1458,P1,10.0 +1461,P3,10.0 +1466,P3,10.0 +1467,P3,10.0 +1475,P1,10.0 +1476,P1,10.0 +1484,P1,10.0 +1500,P1,10.0 +1501,P2,10.0 +1503,P1,10.0 +1504,P1,10.0 +1507,P2,10.0 +1508,P1,10.0 +1548,P1,10.0 +1549,P4,10.0 +1550,P3,10.0 +1552,P4,10.0 +1554,P1,10.0 +1555,P1,10.0 +1571,P3,10.0 +1579,P2,10.0 +1580,P1,10.0 +1581,P4,10.0 +1589,P3,10.0 +1590,P3,10.0 +1661,P1,10.0 +1663,P3,10.0 +1675,P1,10.0 +1676,P4,10.0 +1685,P4,10.0 +1686,P2,10.0 +1687,P3,10.0 +1707,P4,10.0 +1713,P1,10.0 +1718,P4,10.0 +1719,P2,10.0 +1721,P2,10.0 +1728,P1,10.0 +1730,P4,10.0 +1733,P3,10.0 +1737,P1,10.0 +1740,P4,10.0 +1742,P3,10.0 +1743,P1,10.0 +1744,P1,10.0 +1747,P1,10.0 +1750,P4,10.0 +1751,P4,10.0 +1759,P1,10.0 +1760,P3,10.0 +1761,P4,10.0 +1762,P2,10.0 +1767,P3,10.0 +1770,P1,10.0 +1771,P1,10.0 +1776,P3,10.0 +1785,P4,10.0 +1786,P1,10.0 +1804,P4,10.0 +1818,P1,10.0 +1820,P2,10.0 +1823,P3,10.0 +1824,P4,10.0 +1832,P1,10.0 +1833,P4,10.0 +1838,P3,10.0 +1848,P1,10.0 +1849,P3,10.0 +1850,P2,10.0 +1851,P2,10.0 +1852,P4,10.0 +1860,P4,10.0 +1861,P1,10.0 +1864,P3,10.0 +1874,P4,10.0 +1881,P3,10.0 +1892,P2,10.0 +1893,P2,10.0 +1900,P1,10.0 +1901,P3,10.0 +1902,P1,10.0 +1903,P2,10.0 +1907,P3,10.0 +1909,P1,10.0 +1918,P4,10.0 +1919,P2,10.0 +1922,P3,10.0 +1928,P3,10.0 +1934,P4,10.0 +1935,P4,10.0 +1943,P3,10.0 +1976,P4,10.0 +1982,P2,10.0 +1984,P4,10.0 *********************************************************** ** Outputs --> frd file @@ -3791,8 +3791,8 @@ RF *********************************************************** ** CalculiX Input file -** written by --> FreeCAD 0.20.25211 (Git) -** written on --> Fri Jul 9 17:37:32 2021 +** written by --> FreeCAD 0.21.0 +** written on --> Tue Mar 28 06:46:40 2023 ** file name --> constraint_transform_beam_hinged.FCStd ** analysis name --> Analysis ** diff --git a/src/Mod/Fem/femtest/data/calculix/material_multiple_tensionrod_twoboxes.inp b/src/Mod/Fem/femtest/data/calculix/material_multiple_tensionrod_twoboxes.inp index ab2d0d6c2a..381828eb1b 100644 --- a/src/Mod/Fem/femtest/data/calculix/material_multiple_tensionrod_twoboxes.inp +++ b/src/Mod/Fem/femtest/data/calculix/material_multiple_tensionrod_twoboxes.inp @@ -1249,22 +1249,22 @@ ConstraintFixed,3 ** ConstraintPressure *DLOAD ** ConstraintPressure: face load -61,P3,1000 -74,P3,1000 -75,P3,1000 -80,P2,1000 -96,P3,1000 -99,P3,1000 -100,P4,1000 -102,P3,1000 -117,P3,1000 -118,P3,1000 -121,P3,1000 -124,P4,1000 -127,P2,1000 -131,P4,1000 -132,P4,1000 -134,P2,1000 +61,P3,1000.0 +74,P3,1000.0 +75,P3,1000.0 +80,P2,1000.0 +96,P3,1000.0 +99,P3,1000.0 +100,P4,1000.0 +102,P3,1000.0 +117,P3,1000.0 +118,P3,1000.0 +121,P3,1000.0 +124,P4,1000.0 +127,P2,1000.0 +131,P4,1000.0 +132,P4,1000.0 +134,P2,1000.0 *********************************************************** ** Outputs --> frd file @@ -1283,8 +1283,8 @@ RF *********************************************************** ** CalculiX Input file -** written by --> FreeCAD 0.19.19432 (Git) -** written on --> Fri Jan 31 08:06:05 2020 +** written by --> FreeCAD 0.21.0 +** written on --> Tue Mar 28 06:48:16 2023 ** file name --> ** analysis name --> Analysis ** diff --git a/src/Mod/Fem/femtest/data/calculix/material_nonlinear.inp b/src/Mod/Fem/femtest/data/calculix/material_nonlinear.inp index 4e1e0c5b30..da02ee8944 100644 --- a/src/Mod/Fem/femtest/data/calculix/material_nonlinear.inp +++ b/src/Mod/Fem/femtest/data/calculix/material_nonlinear.inp @@ -20022,86 +20022,86 @@ ConstraintFixed,3 ** ConstraintPressure *DLOAD ** ConstraintPressure: face load -4796,P3,-130 -4799,P4,-130 -4872,P4,-130 -4875,P1,-130 -5260,P3,-130 -5261,P4,-130 -5286,P3,-130 -5287,P3,-130 -5527,P1,-130 -5528,P3,-130 -5647,P1,-130 -5648,P1,-130 -5886,P1,-130 -5887,P1,-130 -5993,P1,-130 -5994,P1,-130 -6114,P1,-130 -6115,P1,-130 -6591,P3,-130 -6592,P3,-130 -6685,P3,-130 -6686,P3,-130 -6827,P4,-130 -6828,P4,-130 -7016,P4,-130 -7017,P4,-130 -7221,P1,-130 -7222,P1,-130 -7360,P3,-130 -7361,P3,-130 -7863,P3,-130 -7864,P3,-130 -8589,P1,-130 -8590,P3,-130 -9169,P4,-130 -9170,P4,-130 -10527,P4,-130 -10530,P1,-130 -10580,P4,-130 -10583,P1,-130 -10735,P3,-130 -10736,P3,-130 -10741,P4,-130 -10742,P3,-130 -10753,P1,-130 -10759,P4,-130 -10791,P4,-130 -10793,P1,-130 -10811,P4,-130 -10831,P4,-130 -10832,P1,-130 -10845,P1,-130 -10846,P1,-130 -10862,P4,-130 -10865,P1,-130 -10868,P3,-130 -10869,P1,-130 -10870,P3,-130 -10871,P3,-130 -10881,P1,-130 -10882,P4,-130 -10885,P1,-130 -10886,P1,-130 -10902,P1,-130 -10903,P1,-130 -10926,P1,-130 -10927,P1,-130 -10930,P1,-130 -10933,P4,-130 -11005,P1,-130 -11006,P1,-130 -11009,P1,-130 -11010,P4,-130 -11018,P1,-130 -11019,P1,-130 -11054,P4,-130 -11055,P4,-130 -11114,P3,-130 -11157,P1,-130 -11158,P4,-130 +4796,P3,-130.0 +4799,P4,-130.0 +4872,P4,-130.0 +4875,P1,-130.0 +5260,P3,-130.0 +5261,P4,-130.0 +5286,P3,-130.0 +5287,P3,-130.0 +5527,P1,-130.0 +5528,P3,-130.0 +5647,P1,-130.0 +5648,P1,-130.0 +5886,P1,-130.0 +5887,P1,-130.0 +5993,P1,-130.0 +5994,P1,-130.0 +6114,P1,-130.0 +6115,P1,-130.0 +6591,P3,-130.0 +6592,P3,-130.0 +6685,P3,-130.0 +6686,P3,-130.0 +6827,P4,-130.0 +6828,P4,-130.0 +7016,P4,-130.0 +7017,P4,-130.0 +7221,P1,-130.0 +7222,P1,-130.0 +7360,P3,-130.0 +7361,P3,-130.0 +7863,P3,-130.0 +7864,P3,-130.0 +8589,P1,-130.0 +8590,P3,-130.0 +9169,P4,-130.0 +9170,P4,-130.0 +10527,P4,-130.0 +10530,P1,-130.0 +10580,P4,-130.0 +10583,P1,-130.0 +10735,P3,-130.0 +10736,P3,-130.0 +10741,P4,-130.0 +10742,P3,-130.0 +10753,P1,-130.0 +10759,P4,-130.0 +10791,P4,-130.0 +10793,P1,-130.0 +10811,P4,-130.0 +10831,P4,-130.0 +10832,P1,-130.0 +10845,P1,-130.0 +10846,P1,-130.0 +10862,P4,-130.0 +10865,P1,-130.0 +10868,P3,-130.0 +10869,P1,-130.0 +10870,P3,-130.0 +10871,P3,-130.0 +10881,P1,-130.0 +10882,P4,-130.0 +10885,P1,-130.0 +10886,P1,-130.0 +10902,P1,-130.0 +10903,P1,-130.0 +10926,P1,-130.0 +10927,P1,-130.0 +10930,P1,-130.0 +10933,P4,-130.0 +11005,P1,-130.0 +11006,P1,-130.0 +11009,P1,-130.0 +11010,P4,-130.0 +11018,P1,-130.0 +11019,P1,-130.0 +11054,P4,-130.0 +11055,P4,-130.0 +11114,P3,-130.0 +11157,P1,-130.0 +11158,P4,-130.0 *********************************************************** ** Outputs --> frd file @@ -20120,8 +20120,8 @@ RF *********************************************************** ** CalculiX Input file -** written by --> FreeCAD 0.19.19432 (Git) -** written on --> Fri Jan 31 08:04:49 2020 +** written by --> FreeCAD 0.21.0 +** written on --> Tue Mar 28 07:12:17 2023 ** file name --> ** analysis name --> Analysis **