Esempio n. 1
0
    def test_box_static_0_mm(self):
        fcc_print("")
        self.set_unit_schema(0)  # mm/kg/s

        # set up the Elmer static analysis example
        from femexamples.boxanalysis_static import setup
        setup(self.document, "elmer")

        # for information:
        # elmer needs gmsh mesho object
        # FIXME error message on Python solver run
        # the examples do use a gmsh mesh object thus ok

        base_name = get_namefromdef("test_")
        analysis_dir = testtools.get_fem_test_tmp_dir(self.pre_dir_name +
                                                      base_name)

        # save the file
        save_fc_file = join(analysis_dir, base_name + ".FCStd")
        # fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
        self.document.saveAs(save_fc_file)

        # write input files
        # fcc_print("Checking FEM input file writing for Elmer solver framework solver ...")
        machine_elmer = self.document.SolverElmer.Proxy.createMachine(
            self.document.SolverElmer, analysis_dir, True)
        machine_elmer.target = femsolver.run.PREPARE
        machine_elmer.start()
        machine_elmer.join()  # wait for the machine to finish.

        fcc_print("Test writing STARTINFO file")
        startinfo_given = join(self.test_file_dir, "ELMERSOLVER_STARTINFO")
        startinfo_totest = join(analysis_dir, "ELMERSOLVER_STARTINFO")
        # fcc_print("Comparing {} to {}".format(startinfo_given, startinfo_totest))
        ret = testtools.compare_files(startinfo_given, startinfo_totest)
        self.assertFalse(ret,
                         "STARTINFO write file test failed.\n{}".format(ret))

        fcc_print("Test writing case file")
        casefile_given = join(self.test_file_dir, base_name + self.ending)
        casefile_totest = join(analysis_dir, self.infilename + self.ending)
        # fcc_print("Comparing {} to {}".format(casefile_given, casefile_totest))
        ret = testtools.compare_files(casefile_given, casefile_totest)
        self.assertFalse(ret, "case write file test failed.\n{}".format(ret))

        fcc_print("Test writing GMSH geo file")
        gmshgeofile_given = join(self.test_file_dir, "group_mesh.geo")
        gmshgeofile_totest = join(analysis_dir, "group_mesh.geo")
        # fcc_print("Comparing {} to {}".format(gmshgeofile_given, gmshgeofile_totest))
        ret = testtools.compare_files(gmshgeofile_given, gmshgeofile_totest)
        self.assertFalse(ret,
                         "GMSH geo write file test failed.\n{}".format(ret))
Esempio n. 2
0
    def test_ccxcantilever_faceload_1_si(self):
        if sys.version_info.major < 3:
            # TODO does not pass on Python 2
            # https://travis-ci.org/github/FreeCAD/FreeCAD/builds/707885742
            # https://api.travis-ci.org/v3/job/707885745/log.txt
            fcc_print("Python 2: test aborted.")
            return

        fcc_print("")
        self.set_unit_schema(1)  # SI-units m/kg/s
        from femexamples.ccx_cantilever_faceload import setup
        setup(self.document, "elmer")
        self.input_file_writing_test(get_namefromdef("test_"))
Esempio n. 3
0
    def test_elmer_ccxcanti_faceload(
        self
    ):
        fcc_print("\n------------- Start of FEM elmer tests for ccx cantilever faceload -------")

        # set up the Elmer static analysis example
        from femexamples.ccx_cantilever_faceload import setup
        setup(self.document, "elmer")

        solver_obj = self.document.SolverElmer

        base_name = "elmer_ccxcanti_faceload"
        analysis_dir = testtools.get_unit_test_tmp_dir(self.temp_dir, solver_obj.Name)

        # save the file
        save_fc_file = join(analysis_dir, solver_obj.Name + "_" + base_name + ".FCStd")
        fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
        self.document.saveAs(save_fc_file)

        # write input files
        fcc_print("Checking FEM input file writing for Elmer solver framework solver ...")
        machine_elmer = solver_obj.Proxy.createMachine(
            solver_obj,
            analysis_dir,
            True
        )
        machine_elmer.target = femsolver.run.PREPARE
        machine_elmer.start()
        machine_elmer.join()  # wait for the machine to finish.

        # compare case input file
        test_file_dir_elmer = join(testtools.get_fem_test_home_dir(), "elmer")
        fcc_print(test_file_dir_elmer)

        fcc_print("Test writing case file")
        casefile_given = join(test_file_dir_elmer, "elmer_ccxcanti_faceload_mm.sif")
        casefile_totest = join(analysis_dir, "case.sif")
        fcc_print("Comparing {} to {}".format(casefile_given, casefile_totest))
        ret = testtools.compare_files(casefile_given, casefile_totest)
        self.assertFalse(ret, "case write file test failed.\n{}".format(ret))

        fcc_print("--------------- End of FEM elmer tests for ccx cantilever faceload ---------")
Esempio n. 4
0
    def test_solver_calculix(self):
        fcc_print(
            "\n--------------- Start of FEM tests solver framework solver CalculiX ------"
        )

        # set up the CalculiX static analysis example
        from femexamples.boxanalysis_static import setup
        setup(self.document, "calculix")

        solver_obj = self.document.SolverCalculiX

        base_name = "cube_static"
        analysis_dir = testtools.get_unit_test_tmp_dir(self.temp_dir,
                                                       solver_obj.Name)

        # save the file
        save_fc_file = join(analysis_dir,
                            solver_obj.Name + "_" + base_name + ".FCStd")
        fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
        self.document.saveAs(save_fc_file)

        # write input file
        fcc_print(
            "Checking FEM input file writing for CalculiX solver framework solver ..."
        )
        machine_ccx = solver_obj.Proxy.createMachine(solver_obj, analysis_dir)
        machine_ccx.target = femsolver.run.PREPARE
        machine_ccx.start()
        machine_ccx.join()  # wait for the machine to finish.

        infile_given = join(testtools.get_fem_test_home_dir(), "ccx",
                            (base_name + ".inp"))
        inpfile_totest = join(analysis_dir, (self.mesh_name + ".inp"))
        fcc_print("Comparing {} to {}".format(infile_given, inpfile_totest))
        ret = testtools.compare_inp_files(infile_given, inpfile_totest)
        self.assertFalse(
            ret, "ccxtools write_inp_file test failed.\n{}".format(ret))

        fcc_print(
            "--------------- End of FEM tests solver framework solver CalculiX --------"
        )
Esempio n. 5
0
 def test_ccxcantilever_prescribeddisplacement_0_mm(self):
     fcc_print("")
     self.set_unit_schema(0)  # mm/kg/s
     from femexamples.ccx_cantilever_prescribeddisplacement import setup
     setup(self.document, "elmer")
     self.input_file_writing_test(get_namefromdef("test_"))
Esempio n. 6
0
    def test_solver_elmer(
        self
    ):
        fcc_print("\n--------------- Start of FEM tests solver framework solver Elmer ---------")

        # set up the Elmer static analysis example
        from femexamples.boxanalysis_static import setup
        setup(self.document, "elmer")

        # for information:
        # elmer needs gmsh mesho object
        # FIXME error message on Python solver run
        # the examples do use a gmsh mesh object thus ok
        # FIXME elmer elasticity needs the dict key "ThermalExpansionCoefficient" in material

        solver_obj = self.document.SolverElmer

        base_name = "cube_static"
        analysis_dir = testtools.get_unit_test_tmp_dir(self.temp_dir, solver_obj.Name)

        # save the file
        save_fc_file = join(analysis_dir, solver_obj.Name + "_" + base_name + ".FCStd")
        fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
        self.document.saveAs(save_fc_file)

        # write input files
        fcc_print("Checking FEM input file writing for Elmer solver framework solver ...")
        machine_elmer = solver_obj.Proxy.createMachine(
            solver_obj,
            analysis_dir,
            True
        )
        machine_elmer.target = femsolver.run.PREPARE
        machine_elmer.start()
        machine_elmer.join()  # wait for the machine to finish.

        # compare startinfo, case and gmsh input files
        test_file_dir_elmer = join(testtools.get_fem_test_home_dir(), "elmer")
        fcc_print(test_file_dir_elmer)

        fcc_print("Test writing STARTINFO file")
        startinfo_given = join(test_file_dir_elmer, "ELMERSOLVER_STARTINFO")
        startinfo_totest = join(analysis_dir, "ELMERSOLVER_STARTINFO")
        fcc_print("Comparing {} to {}".format(startinfo_given, startinfo_totest))
        ret = testtools.compare_files(startinfo_given, startinfo_totest)
        self.assertFalse(ret, "STARTINFO write file test failed.\n{}".format(ret))

        fcc_print("Test writing case file")
        casefile_given = join(test_file_dir_elmer, "case_mm.sif")
        casefile_totest = join(analysis_dir, "case.sif")
        fcc_print("Comparing {} to {}".format(casefile_given, casefile_totest))
        ret = testtools.compare_files(casefile_given, casefile_totest)
        self.assertFalse(ret, "case write file test failed.\n{}".format(ret))

        fcc_print("Test writing GMSH geo file")
        gmshgeofile_given = join(test_file_dir_elmer, "group_mesh.geo")
        gmshgeofile_totest = join(analysis_dir, "group_mesh.geo")
        fcc_print("Comparing {} to {}".format(gmshgeofile_given, gmshgeofile_totest))
        ret = testtools.compare_files(gmshgeofile_given, gmshgeofile_totest)
        self.assertFalse(ret, "GMSH geo write file test failed.\n{}".format(ret))

        fcc_print("--------------- End of FEM tests solver framework solver Elmer -----------")
Esempio n. 7
0
    def test_solver_elmer(self):
        fcc_print(
            "\n--------------- Start of FEM tests solver framework solver Elmer ---------"
        )

        # set up the Elmer static analysis example
        from femexamples.boxanalysis_static import setup
        setup(self.document, "elmer")

        analysis_obj = self.document.Analysis
        solver_obj = self.document.SolverElmer
        material_obj = self.document.MechanicalMaterial
        mesh_obj = self.document.Mesh
        box_object = self.document.Box

        base_name = "cube_static"
        analysis_dir = testtools.get_unit_test_tmp_dir(self.temp_dir,
                                                       solver_obj.Name)

        # TODO move to elmer solver of femexample code
        ObjectsFem.makeEquationElasticity(self.document, solver_obj)

        # set ThermalExpansionCoefficient
        # FIXME elmer elasticity needs the dictionary key "ThermalExpansionCoefficient"
        # even on simple elasticity analysis, otherwise it fails
        mat = material_obj.Material
        mat["ThermalExpansionCoefficient"] = "0 um/m/K"
        material_obj.Material = mat

        # elmer needs a GMHS mesh object
        # FIXME error message on Python solver run
        mesh_gmsh = ObjectsFem.makeMeshGmsh(self.document)
        mesh_gmsh.CharacteristicLengthMin = "9 mm"
        mesh_gmsh.FemMesh = mesh_obj.FemMesh
        mesh_gmsh.Part = box_object
        analysis_obj.addObject(mesh_gmsh)
        self.document.removeObject(
            mesh_obj.Name)  # remove original mesh object

        # save the file
        save_fc_file = join(analysis_dir,
                            solver_obj.Name + "_" + base_name + ".FCStd")
        fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
        self.document.saveAs(save_fc_file)

        # write input files
        fcc_print(
            "Checking FEM input file writing for Elmer solver framework solver ..."
        )
        machine_elmer = solver_obj.Proxy.createMachine(solver_obj,
                                                       analysis_dir, True)
        machine_elmer.target = femsolver.run.PREPARE
        machine_elmer.start()
        machine_elmer.join()  # wait for the machine to finish.

        # compare startinfo, case and gmsh input files
        test_file_dir_elmer = join(testtools.get_fem_test_home_dir(), "elmer")
        fcc_print(test_file_dir_elmer)

        fcc_print("Test writing STARTINFO file")
        startinfo_given = join(test_file_dir_elmer, "ELMERSOLVER_STARTINFO")
        startinfo_totest = join(analysis_dir, "ELMERSOLVER_STARTINFO")
        fcc_print("Comparing {} to {}".format(startinfo_given,
                                              startinfo_totest))
        ret = testtools.compare_files(startinfo_given, startinfo_totest)
        self.assertFalse(ret,
                         "STARTINFO write file test failed.\n{}".format(ret))

        fcc_print("Test writing case file")
        casefile_given = join(test_file_dir_elmer, "case.sif")
        casefile_totest = join(analysis_dir, "case.sif")
        fcc_print("Comparing {} to {}".format(casefile_given, casefile_totest))
        ret = testtools.compare_files(casefile_given, casefile_totest)
        self.assertFalse(ret, "case write file test failed.\n{}".format(ret))

        fcc_print("Test writing GMSH geo file")
        gmshgeofile_given = join(test_file_dir_elmer, "group_mesh.geo")
        gmshgeofile_totest = join(analysis_dir, "group_mesh.geo")
        fcc_print("Comparing {} to {}".format(gmshgeofile_given,
                                              gmshgeofile_totest))
        ret = testtools.compare_files(gmshgeofile_given, gmshgeofile_totest)
        self.assertFalse(ret,
                         "GMSH geo write file test failed.\n{}".format(ret))

        fcc_print(
            "--------------- End of FEM tests solver framework solver Elmer -----------"
        )
Esempio n. 8
0
 def test_solver_calculix(
     self
 ):
     from femexamples.boxanalysis_static import setup
     setup(self.document, "calculix")
     self.calculix_inputfile_writing_test("cube_static")
Esempio n. 9
0
 def test_elmer_ccxcanti_nodeload(self):
     from femexamples.ccx_cantilever_nodeload import setup
     setup(self.document, "elmer")
     self.elmer_inputfile_writing_test("elmer_ccxcanti_nodeload")
Esempio n. 10
0
 def test_ccxcantilever_faceload_1_si(self):
     fcc_print("")
     self.set_unit_schema(1)  # SI-units m/kg/s
     from femexamples.ccx_cantilever_faceload import setup
     setup(self.document, "elmer")
     self.input_file_writing_test(get_namefromdef("test_"))
Esempio n. 11
0
 def test_ccxcantilever_nodeload(self):
     fcc_print("")
     from femexamples.ccx_cantilever_nodeload import setup
     setup(self.document, "elmer")
     self.input_file_writing_test(get_namefromdef("test_"))