| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | __title__ = "FreeCAD FEM calculix write inpfile step output" |
| | __author__ = "Bernd Hahnebach" |
| | __url__ = "https://www.freecad.org" |
| |
|
| |
|
| | def write_step_output(f, ccxwriter): |
| |
|
| | f.write("\n{}\n".format(59 * "*")) |
| | f.write("** Outputs --> frd file\n") |
| | if ( |
| | ccxwriter.member.geos_beamsection |
| | or ccxwriter.member.geos_shellthickness |
| | or ccxwriter.member.geos_fluidsection |
| | ): |
| | if ccxwriter.solver_obj.BeamShellResultOutput3D is False: |
| | f.write("*NODE FILE, OUTPUT=2d\n") |
| | else: |
| | f.write("*NODE FILE, OUTPUT=3d\n") |
| | else: |
| | f.write("*NODE FILE\n") |
| | |
| | if ccxwriter.analysis_type == "thermomech": |
| | if not ccxwriter.member.geos_fluidsection: |
| | f.write("U, NT\n") |
| | else: |
| | f.write("MF, PS\n") |
| | elif ccxwriter.analysis_type == "electromagnetic": |
| | f.write("NT\n") |
| | else: |
| | f.write("U\n") |
| | if not ccxwriter.member.geos_fluidsection: |
| | f.write("*EL FILE\n") |
| | variables = "S, E" |
| | if ccxwriter.analysis_type == "thermomech": |
| | variables += ", HFL" |
| | if ccxwriter.solver_obj.MaterialNonlinearity == "nonlinear": |
| | variables += ", PEEQ" |
| | if ccxwriter.analysis_type == "electromagnetic": |
| | variables = "HFL" |
| |
|
| | f.write(variables + "\n") |
| |
|
| | |
| | if ccxwriter.member.cons_fixed or ccxwriter.member.cons_displacement: |
| | f.write("** outputs --> dat file\n") |
| | if ccxwriter.member.cons_fixed: |
| | |
| | f.write("** reaction forces for Constraint fixed\n") |
| | for femobj in ccxwriter.member.cons_fixed: |
| | |
| | f.write("*NODE PRINT, NSET={}, TOTALS=ONLY\n".format(femobj["Object"].Name)) |
| | f.write("RF\n") |
| | if ccxwriter.member.cons_displacement: |
| | |
| | f.write("** reaction forces for Constraint displacement constraining translation\n") |
| | for femobj in ccxwriter.member.cons_displacement: |
| | |
| | if ( |
| | not femobj["Object"].xFree |
| | or not femobj["Object"].yFree |
| | or not femobj["Object"].zFree |
| | ): |
| | f.write("*NODE PRINT, NSET={}, TOTALS=ONLY\n".format(femobj["Object"].Name)) |
| | f.write("RF\n") |
| | if ccxwriter.member.cons_rigidbody: |
| | |
| | f.write("** displacements and reaction forces/moments for Constraint rigid body\n") |
| | for femobj in ccxwriter.member.cons_rigidbody: |
| | |
| | f.write("*NODE PRINT, NSET={}_RefNode\n".format(femobj["Object"].Name)) |
| | f.write("U\n") |
| | f.write("*NODE PRINT, NSET={}_RotNode\n".format(femobj["Object"].Name)) |
| | f.write("U\n") |
| | if ( |
| | femobj["Object"].TranslationalModeX != "Free" |
| | or femobj["Object"].TranslationalModeY != "Free" |
| | or femobj["Object"].TranslationalModeZ != "Free" |
| | ): |
| | f.write( |
| | "*NODE PRINT, NSET={}_RefNode, TOTALS=ONLY\n".format(femobj["Object"].Name) |
| | ) |
| | f.write("RF\n") |
| | if ( |
| | femobj["Object"].RotationalModeX != "Free" |
| | or femobj["Object"].RotationalModeY != "Free" |
| | or femobj["Object"].RotationalModeZ != "Free" |
| | ): |
| | f.write( |
| | "*NODE PRINT, NSET={}_RotNode, TOTALS=ONLY\n".format(femobj["Object"].Name) |
| | ) |
| | f.write("RF\n") |
| | if ccxwriter.member.cons_contact: |
| | |
| | f.write("** contact forces for Constraint contact\n") |
| | for femobj in ccxwriter.member.cons_contact: |
| | |
| | f.write( |
| | "*CONTACT PRINT, MASTER={}, SLAVE={}\n".format( |
| | "IND" + femobj["Object"].Name, "DEP" + femobj["Object"].Name |
| | ) |
| | ) |
| | f.write("CF, CFN, CFS\n") |
| | if any( |
| | vars(ccxwriter.member).get(f"cons_{key}") |
| | for key in ["fixed", "displacement", "rigidbody", "contact"] |
| | ): |
| | f.write("\n") |
| | f.write(f"*OUTPUT, FREQUENCY={ccxwriter.solver_obj.OutputFrequency}") |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|