diff --git a/src/Mod/Fem/App/FemConstraintDisplacement.cpp b/src/Mod/Fem/App/FemConstraintDisplacement.cpp index c313d5c57a..14cca05f62 100644 --- a/src/Mod/Fem/App/FemConstraintDisplacement.cpp +++ b/src/Mod/Fem/App/FemConstraintDisplacement.cpp @@ -148,6 +148,16 @@ ConstraintDisplacement::ConstraintDisplacement() "ConstraintDisplacement", App::Prop_None, "Rotation in local Z direction"); + ADD_PROPERTY_TYPE(EnableAmplitude, + (false), + "ConstraintDisplacement", + (App::PropertyType)(App::Prop_None), + "Amplitude of the displacement boundary condition"); + ADD_PROPERTY_TYPE(AmplitudeValues, + (std::vector {"0, 0", "1, 1"}), + "ConstraintFDisplacement", + (App::PropertyType)(App::Prop_None), + "Amplitude values"); } App::DocumentObjectExecReturn* ConstraintDisplacement::execute() diff --git a/src/Mod/Fem/App/FemConstraintDisplacement.h b/src/Mod/Fem/App/FemConstraintDisplacement.h index f2debea70e..b046fd6db9 100644 --- a/src/Mod/Fem/App/FemConstraintDisplacement.h +++ b/src/Mod/Fem/App/FemConstraintDisplacement.h @@ -40,6 +40,9 @@ public: /// Constructor ConstraintDisplacement(); + App::PropertyBool EnableAmplitude; + App::PropertyStringList AmplitudeValues; + // Displacement parameters App::PropertyDistance xDisplacement; App::PropertyDistance yDisplacement; diff --git a/src/Mod/Fem/App/FemConstraintForce.cpp b/src/Mod/Fem/App/FemConstraintForce.cpp index 65da11d919..e178906d60 100644 --- a/src/Mod/Fem/App/FemConstraintForce.cpp +++ b/src/Mod/Fem/App/FemConstraintForce.cpp @@ -54,6 +54,16 @@ ConstraintForce::ConstraintForce() // by default use the null vector to indicate an invalid value naturalDirectionVector = Base::Vector3d(0, 0, 0); + ADD_PROPERTY_TYPE(EnableAmplitude, + (false), + "ConstraintForce", + (App::PropertyType)(App::Prop_None), + "Amplitude of the force load"); + ADD_PROPERTY_TYPE(AmplitudeValues, + (std::vector {"0, 0", "1, 1"}), + "ConstraintForce", + (App::PropertyType)(App::Prop_None), + "Amplitude values"); } App::DocumentObjectExecReturn* ConstraintForce::execute() diff --git a/src/Mod/Fem/App/FemConstraintForce.h b/src/Mod/Fem/App/FemConstraintForce.h index 1c8bed7f0d..e762bbf568 100644 --- a/src/Mod/Fem/App/FemConstraintForce.h +++ b/src/Mod/Fem/App/FemConstraintForce.h @@ -38,6 +38,8 @@ public: /// Constructor ConstraintForce(); + App::PropertyBool EnableAmplitude; + App::PropertyStringList AmplitudeValues; App::PropertyForce Force; App::PropertyLinkSub Direction; App::PropertyBool Reversed; diff --git a/src/Mod/Fem/App/FemConstraintHeatflux.cpp b/src/Mod/Fem/App/FemConstraintHeatflux.cpp index 0b99849129..016bd2272a 100644 --- a/src/Mod/Fem/App/FemConstraintHeatflux.cpp +++ b/src/Mod/Fem/App/FemConstraintHeatflux.cpp @@ -56,6 +56,16 @@ ConstraintHeatflux::ConstraintHeatflux() App::Prop_None, "Cavity radiation"); ADD_PROPERTY_TYPE(CavityName, ("cav"), "ConstraintHeatflux", App::Prop_None, "Cavity name"); + ADD_PROPERTY_TYPE(EnableAmplitude, + (false), + "ConstraintHeatflux", + (App::PropertyType)(App::Prop_None), + "Amplitude of the heat flux load"); + ADD_PROPERTY_TYPE(AmplitudeValues, + (std::vector {"0, 0", "1, 1"}), + "ConstraintHeatflux", + (App::PropertyType)(App::Prop_None), + "Amplitude values"); } App::DocumentObjectExecReturn* ConstraintHeatflux::execute() diff --git a/src/Mod/Fem/App/FemConstraintHeatflux.h b/src/Mod/Fem/App/FemConstraintHeatflux.h index f378f19462..4e10786f83 100644 --- a/src/Mod/Fem/App/FemConstraintHeatflux.h +++ b/src/Mod/Fem/App/FemConstraintHeatflux.h @@ -39,6 +39,9 @@ class FemExport ConstraintHeatflux: public Fem::Constraint public: ConstraintHeatflux(); + App::PropertyBool EnableAmplitude; + App::PropertyStringList AmplitudeValues; + App::PropertyTemperature AmbientTemp; /*App::PropertyFloat FaceTemp;*/ App::PropertyThermalTransferCoefficient FilmCoef; diff --git a/src/Mod/Fem/App/FemConstraintPressure.cpp b/src/Mod/Fem/App/FemConstraintPressure.cpp index 78b0f6c2f4..08395579fb 100644 --- a/src/Mod/Fem/App/FemConstraintPressure.cpp +++ b/src/Mod/Fem/App/FemConstraintPressure.cpp @@ -34,6 +34,16 @@ ConstraintPressure::ConstraintPressure() { ADD_PROPERTY(Pressure, (0.0)); ADD_PROPERTY(Reversed, (0)); + ADD_PROPERTY_TYPE(EnableAmplitude, + (false), + "ConstraintPressure", + (App::PropertyType)(App::Prop_None), + "Amplitude of the pressure load"); + ADD_PROPERTY_TYPE(AmplitudeValues, + (std::vector {"0, 0", "1, 1"}), + "ConstraintPressure", + (App::PropertyType)(App::Prop_None), + "Amplitude values"); } App::DocumentObjectExecReturn* ConstraintPressure::execute() diff --git a/src/Mod/Fem/App/FemConstraintPressure.h b/src/Mod/Fem/App/FemConstraintPressure.h index c2389de792..5e8ceeae38 100644 --- a/src/Mod/Fem/App/FemConstraintPressure.h +++ b/src/Mod/Fem/App/FemConstraintPressure.h @@ -37,6 +37,8 @@ class FemExport ConstraintPressure: public Fem::Constraint public: ConstraintPressure(); + App::PropertyBool EnableAmplitude; + App::PropertyStringList AmplitudeValues; App::PropertyPressure Pressure; App::PropertyBool Reversed; diff --git a/src/Mod/Fem/App/FemConstraintTemperature.cpp b/src/Mod/Fem/App/FemConstraintTemperature.cpp index c13801425e..a5e33d8d70 100644 --- a/src/Mod/Fem/App/FemConstraintTemperature.cpp +++ b/src/Mod/Fem/App/FemConstraintTemperature.cpp @@ -44,6 +44,16 @@ ConstraintTemperature::ConstraintTemperature() (App::PropertyType)(App::Prop_None), "Type of constraint, temperature or concentrated heat flux"); ConstraintType.setEnums(ConstraintTypes); + ADD_PROPERTY_TYPE(EnableAmplitude, + (false), + "ConstraintTemperature", + (App::PropertyType)(App::Prop_None), + "Amplitude of the temperature boundary condition"); + ADD_PROPERTY_TYPE(AmplitudeValues, + (std::vector {"0, 0", "1, 1"}), + "ConstraintTemperature", + (App::PropertyType)(App::Prop_None), + "Amplitude values"); } App::DocumentObjectExecReturn* ConstraintTemperature::execute() diff --git a/src/Mod/Fem/App/FemConstraintTemperature.h b/src/Mod/Fem/App/FemConstraintTemperature.h index cf5612e2ef..350f59d715 100644 --- a/src/Mod/Fem/App/FemConstraintTemperature.h +++ b/src/Mod/Fem/App/FemConstraintTemperature.h @@ -40,6 +40,9 @@ public: /// Constructor ConstraintTemperature(); + App::PropertyBool EnableAmplitude; + App::PropertyStringList AmplitudeValues; + // Temperature parameters App::PropertyTemperature Temperature; App::PropertyPower CFlux; diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index aca1b443f0..0c7cc718f3 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -273,6 +273,7 @@ SET(FemSolverCalculix_SRCS femsolver/calculix/write_femelement_geometry.py femsolver/calculix/write_femelement_material.py femsolver/calculix/write_femelement_matgeosets.py + femsolver/calculix/write_amplitude.py femsolver/calculix/write_footer.py femsolver/calculix/write_mesh.py femsolver/calculix/write_step_equation.py diff --git a/src/Mod/Fem/femobjects/constraint_bodyheatsource.py b/src/Mod/Fem/femobjects/constraint_bodyheatsource.py index b7c62ca256..4043895ba6 100644 --- a/src/Mod/Fem/femobjects/constraint_bodyheatsource.py +++ b/src/Mod/Fem/femobjects/constraint_bodyheatsource.py @@ -78,7 +78,24 @@ class ConstraintBodyHeatSource(base_fempythonobject.BaseFemPythonObject): value=["Dissipation Rate", "Total Power"], ) ) - + prop.append( + _PropHelper( + type="App::PropertyBool", + name="EnableAmplitude", + group="Constraint Body Heat Source", + doc="Amplitude of the body heat source", + value=False, + ) + ) + prop.append( + _PropHelper( + type="App::PropertyStringList", + name="AmplitudeValues", + group="Constraint Body Heat Source", + doc="Amplitude values", + value=["0, 0", "1, 1"], + ) + ) return prop def onDocumentRestored(self, obj): diff --git a/src/Mod/Fem/femsolver/calculix/write_amplitude.py b/src/Mod/Fem/femsolver/calculix/write_amplitude.py new file mode 100644 index 0000000000..87d6b1f1bd --- /dev/null +++ b/src/Mod/Fem/femsolver/calculix/write_amplitude.py @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +# *************************************************************************** +# * Copyright (c) 2025 Jakub Michalski * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** + +__title__ = "FreeCAD FEM calculix amplitude" +__author__ = "Jakub Michalski" +__url__ = "https://www.freecad.org" + + +def write_amplitude(f, ccxwriter): + + # write amplitude definitions for all analysis features that use them + + def write_obj_amplitude(obj): + if obj.EnableAmplitude: + f.write(f"*AMPLITUDE, NAME={obj.Name}\n") + for value in obj.AmplitudeValues: + f.write(f"{value}\n") + f.write("\n") + + constraint_lists = [ + ccxwriter.member.cons_force, + ccxwriter.member.cons_pressure, + ccxwriter.member.cons_displacement, + ccxwriter.member.cons_heatflux, + ccxwriter.member.cons_temperature, + ccxwriter.member.cons_bodyheatsource, + ] + + for constraint_list in constraint_lists: + for entry in constraint_list: + write_obj_amplitude(entry["Object"]) diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py b/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py index e73273bf2b..65d48a7c24 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py @@ -96,6 +96,9 @@ def write_constraint(f, femobj, bodyheatsource_obj, ccxwriter): volume = ref_feat.getSubObject(ref_sub_obj).Volume heat = bodyheatsource_obj.TotalPower / FreeCAD.Units.Quantity(volume, "mm^3") # write to file - f.write("*DFLUX\n") + if bodyheatsource_obj.EnableAmplitude: + f.write(f"*DFLUX, AMPLITUDE={bodyheatsource_obj.Name}\n") + else: + f.write("*DFLUX\n") f.write("{},BF,{:.13G}\n".format(bodyheatsource_obj.Name, heat.getValueAs("t/(mm*s^3)").Value)) f.write("\n") diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_displacement.py b/src/Mod/Fem/femsolver/calculix/write_constraint_displacement.py index 557cfc7abf..1ef6a017fb 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_displacement.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_displacement.py @@ -66,7 +66,10 @@ def write_constraint(f, femobj, disp_obj, ccxwriter): # floats read from ccx should use {:.13G}, see comment in writer module - f.write("*BOUNDARY\n") + if disp_obj.EnableAmplitude: + f.write(f"*BOUNDARY, AMPLITUDE={disp_obj.Name}\n") + else: + f.write("*BOUNDARY\n") if not disp_obj.xFree: f.write( "{},1,1,{}\n".format( diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_force.py b/src/Mod/Fem/femsolver/calculix/write_constraint_force.py index d899913590..562610c445 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_force.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_force.py @@ -35,7 +35,7 @@ def get_sets_name(): def get_before_write_meshdata_constraint(): - return "*CLOAD\n" + return "" def get_after_write_meshdata_constraint(): @@ -46,6 +46,10 @@ def write_meshdata_constraint(f, femobj, force_obj, ccxwriter): # floats read from ccx should use {:.13G}, see comment in writer module + if force_obj.EnableAmplitude: + f.write(f"*CLOAD, AMPLITUDE={force_obj.Name}\n") + else: + f.write("*CLOAD\n") direction_vec = femobj["Object"].DirectionVector dir_zero_tol = 1e-15 # TODO: should this be more generally for more values? # be careful with raising the tolerance, a big load would have an impact diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_heatflux.py b/src/Mod/Fem/femsolver/calculix/write_constraint_heatflux.py index f4a73c3c9a..057b71c1e6 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_heatflux.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_heatflux.py @@ -76,7 +76,12 @@ def write_meshdata_constraint(f, femobj, heatflux_obj, ccxwriter): else: return - f.write(f"*{heatflux_key_word}\n") + if heatflux_obj.EnableAmplitude: + heatflux_amplitude = f", AMPLITUDE={heatflux_obj.Name}" + else: + heatflux_amplitude = "" + + f.write(f"*{heatflux_key_word}{heatflux_amplitude}\n") for ref_shape in femobj["HeatFluxFaceTable"]: elem_string = ref_shape[0] face_table = ref_shape[1] diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py b/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py index de8da3d333..d389da8099 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_pressure.py @@ -48,12 +48,14 @@ def write_meshdata_constraint(f, femobj, prs_obj, ccxwriter): # floats read from ccx should use {:.13G}, see comment in writer module + if prs_obj.EnableAmplitude: + f.write(f"*DLOAD, AMPLITUDE={prs_obj.Name}\n") + else: + f.write("*DLOAD\n") rev = -1 if prs_obj.Reversed else 1 # 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"]: # the loop is needed for compatibility reason # in deprecated method get_pressure_obj_faces_depreciated diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_temperature.py b/src/Mod/Fem/femsolver/calculix/write_constraint_temperature.py index 3c77b73b8d..af4245e914 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_temperature.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_temperature.py @@ -68,8 +68,12 @@ def write_constraint(f, femobj, temp_obj, ccxwriter): # floats read from ccx should use {:.13G}, see comment in writer module NumberOfNodes = len(femobj["Nodes"]) + if temp_obj.EnableAmplitude: + temp_amplitude = f", AMPLITUDE={temp_obj.Name}" + else: + temp_amplitude = "" if temp_obj.ConstraintType == "Temperature": - f.write("*BOUNDARY\n") + f.write(f"*BOUNDARY{temp_amplitude}\n") f.write( "{},11,11,{}\n".format( temp_obj.Name, FreeCAD.Units.Quantity(temp_obj.Temperature.getValueAs("K")) @@ -77,7 +81,7 @@ def write_constraint(f, femobj, temp_obj, ccxwriter): ) f.write("\n") elif temp_obj.ConstraintType == "CFlux": - f.write("*CFLUX\n") + f.write(f"*CFLUX{temp_amplitude}\n") # CFLUX has to be specified in mW f.write( "{},11,{}\n".format( diff --git a/src/Mod/Fem/femsolver/calculix/writer.py b/src/Mod/Fem/femsolver/calculix/writer.py index 5d1e477885..4d766cded2 100644 --- a/src/Mod/Fem/femsolver/calculix/writer.py +++ b/src/Mod/Fem/femsolver/calculix/writer.py @@ -60,6 +60,7 @@ from . import write_femelement_material from . import write_femelement_matgeosets from . import write_footer from . import write_mesh +from . import write_amplitude from . import write_step_equation from . import write_step_output from .. import writerbase @@ -182,6 +183,9 @@ class FemInputWriterCcx(writerbase.FemInputWriter): self.write_constraints_propdata(inpfile, self.member.cons_transform, con_transform) self.write_constraints_propdata(inpfile, self.member.cons_rigidbody, con_rigidbody) + # amplitudes + write_amplitude.write_amplitude(inpfile, self) + # step equation write_step_equation.write_step_equation(inpfile, self) diff --git a/src/Mod/Fem/femtest/data/calculix/box_static.inp b/src/Mod/Fem/femtest/data/calculix/box_static.inp index 0f49a0dd35..26f6972664 100644 --- a/src/Mod/Fem/femtest/data/calculix/box_static.inp +++ b/src/Mod/Fem/femtest/data/calculix/box_static.inp @@ -507,8 +507,8 @@ FemConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** FemConstraintForce +*CLOAD ** node loads on shape: Box:Face6 2,3,-0 4,3,-0 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_buckling_flexuralbuckling.inp b/src/Mod/Fem/femtest/data/calculix/ccx_buckling_flexuralbuckling.inp index 9a2936876c..60cf145dc1 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_buckling_flexuralbuckling.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_buckling_flexuralbuckling.inp @@ -750,8 +750,7 @@ Evolumes ** At least one step is needed to run an CalculiX analysis of FreeCAD *STEP *BUCKLE -10 - +10,0.01 *********************************************************** ** Fixed Constraints @@ -764,8 +763,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: Beam:Face6 65,3,-0.328125 66,3,-0.65625 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_circle.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_circle.inp index 02a5142b02..283aafffeb 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_circle.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_circle.inp @@ -83,8 +83,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: CantileverLine:Vertex2 2,3,-9000000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_pipe.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_pipe.inp index 6fa9db2bab..2317d71854 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_pipe.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_pipe.inp @@ -83,8 +83,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: CantileverLine:Vertex2 2,3,-9000000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_rect.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_rect.inp index 94e87e949b..5422b13492 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_rect.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_rect.inp @@ -83,8 +83,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: CantileverLine:Vertex2 2,3,-9000000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_hexa20.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_hexa20.inp index 53d63bf29b..d9cb1baf3b 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_hexa20.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_hexa20.inp @@ -403,8 +403,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: Box:Face2 5,3,187500 6,3,187500 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad4.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad4.inp index d6c7e51a70..2f18b69e33 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad4.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad4.inp @@ -107,8 +107,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: CanileverPlate:Edge3 3,3,-2250000 4,3,-2250000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad8.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad8.inp index 8d16329a33..850d182be7 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad8.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_quad8.inp @@ -95,8 +95,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: CanileverPlate:Edge3 3,3,-750000 4,3,-750000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg2.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg2.inp index 113b3824d9..287dcc514b 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg2.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg2.inp @@ -225,8 +225,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: CantileverLine:Vertex2 2,3,-9000000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg3.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg3.inp index a40a4ab2c8..76436c4f13 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg3.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_seg3.inp @@ -83,8 +83,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: CantileverLine:Vertex2 2,3,-9000000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria3.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria3.inp index 5fdd761952..49981bb4a6 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria3.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria3.inp @@ -1583,8 +1583,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: CanileverPlate:Edge3 3,3,-642857.1428571 4,3,-642857.1428571 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria6.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria6.inp index 6656f23476..c139a51342 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria6.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_ele_tria6.inp @@ -313,8 +313,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: CanileverPlate:Edge3 3,3,-750000 4,3,-750000 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_faceload.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_faceload.inp index dfc549fd86..28d9a1752c 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_faceload.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_faceload.inp @@ -377,8 +377,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: Box:Face2 1,3,-0 2,3,-0 diff --git a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_nodeload.inp b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_nodeload.inp index 2b3a4e8cd8..fbcfb15685 100644 --- a/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_nodeload.inp +++ b/src/Mod/Fem/femtest/data/calculix/ccx_cantilever_nodeload.inp @@ -377,8 +377,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: Box:Vertex5 4,3,-2250000 diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp b/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp index 810eb4a182..f3e3da97fe 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_contact_shell_shell.inp @@ -38394,8 +38394,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node load on shape: Load_place_point:Vertex1 5,2,-5000 diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp b/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp index 05f5828199..8d9a250ef4 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp @@ -18630,8 +18630,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: BooleanFragments:Edge2 2,2,1666.666666667 8,2,1666.666666667 diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_transform_torque.inp b/src/Mod/Fem/femtest/data/calculix/constraint_transform_torque.inp index 884fa9d973..30b03b5140 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_transform_torque.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_transform_torque.inp @@ -10998,8 +10998,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: Cut:Face1 3,2,-0 4,2,-0 diff --git a/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fiveboxes.inp b/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fiveboxes.inp index c04c8939c7..a10956228c 100644 --- a/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fiveboxes.inp +++ b/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fiveboxes.inp @@ -27652,8 +27652,8 @@ ConstraintFixed,3 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: Box1:Face6 17,3,-0 19,3,-0 diff --git a/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fivefaces.inp b/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fivefaces.inp index 0b249eb8c7..662f656778 100644 --- a/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fivefaces.inp +++ b/src/Mod/Fem/femtest/data/calculix/material_multiple_bendingbeam_fivefaces.inp @@ -2569,8 +2569,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce +*CLOAD ** node loads on shape: Face1:Edge4 9,2,-33.33333333333 11,2,-33.33333333333 diff --git a/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_edgeforces.inp b/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_edgeforces.inp index 58a9b7df9c..1eb8c7b61d 100644 --- a/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_edgeforces.inp +++ b/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_edgeforces.inp @@ -2581,8 +2581,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce1 +*CLOAD ** node loads on shape: SquareTube:Edge9 1,1,2777.777777778 236,1,2777.777777778 @@ -2600,6 +2600,7 @@ ConstraintFixed,6 ** ConstraintForce2 +*CLOAD ** node loads on shape: SquareTube:Edge3 2,1,-2777.777777778 129,1,-2777.777777778 @@ -2617,6 +2618,7 @@ ConstraintFixed,6 ** ConstraintForce3 +*CLOAD ** node loads on shape: SquareTube:Edge11 1,2,2777.777777778 2,2,2777.777777778 @@ -2634,6 +2636,7 @@ ConstraintFixed,6 ** ConstraintForce4 +*CLOAD ** node loads on shape: SquareTube:Edge6 129,2,-2777.777777778 236,2,-2777.777777778 diff --git a/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_nodeforces.inp b/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_nodeforces.inp index 7e89c75905..01494af0ca 100644 --- a/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_nodeforces.inp +++ b/src/Mod/Fem/femtest/data/calculix/square_pipe_end_twisted_nodeforces.inp @@ -2581,8 +2581,8 @@ ConstraintFixed,6 *********************************************************** ** constraints force node loads -*CLOAD ** ConstraintForce1 +*CLOAD ** node load on shape: Forces:Vertex1 1,1,-2777.78 @@ -2591,6 +2591,7 @@ ConstraintFixed,6 ** ConstraintForce2 +*CLOAD ** node load on shape: Forces:Vertex2 2,1,2777.78 @@ -2599,6 +2600,7 @@ ConstraintFixed,6 ** ConstraintForce3 +*CLOAD ** node load on shape: Forces:Vertex20 343,1,-5555.556 @@ -2616,6 +2618,7 @@ ConstraintFixed,6 ** ConstraintForce4 +*CLOAD ** node load on shape: Forces:Vertex9 131,1,5555.556 @@ -2633,6 +2636,7 @@ ConstraintFixed,6 ** ConstraintForce5 +*CLOAD ** node load on shape: Forces:Vertex43 1376,1,-11111.11166667 @@ -2653,6 +2657,7 @@ ConstraintFixed,6 ** ConstraintForce6 +*CLOAD ** node load on shape: Forces:Vertex31 758,1,11111.11166667 @@ -2673,6 +2678,7 @@ ConstraintFixed,6 ** ConstraintForce7 +*CLOAD ** node load on shape: Forces:Vertex1 1,2,-2777.78 @@ -2681,6 +2687,7 @@ ConstraintFixed,6 ** ConstraintForce8 +*CLOAD ** node load on shape: Forces:Vertex8 129,2,2777.78 @@ -2689,6 +2696,7 @@ ConstraintFixed,6 ** ConstraintForce9 +*CLOAD ** node load on shape: Forces:Vertex3 5,2,-5555.556 @@ -2706,6 +2714,7 @@ ConstraintFixed,6 ** ConstraintForce10 +*CLOAD ** node load on shape: Forces:Vertex15 238,2,5555.556 @@ -2723,6 +2732,7 @@ ConstraintFixed,6 ** ConstraintForce11 +*CLOAD ** node load on shape: Forces:Vertex25 429,2,-11111.11166667 @@ -2743,6 +2753,7 @@ ConstraintFixed,6 ** ConstraintForce12 +*CLOAD ** node load on shape: Forces:Vertex37 1067,2,11111.11166667