Esempio n. 1
0
while True:
    # creating the new .inp file for CalculiX
    file_nameW = os.path.join(path, "file" + str(i).zfill(3))
    beso_lib.write_inp(file_name, file_nameW, elm_states, number_of_states, domains, domains_from_config,
                       domain_optimized, domain_thickness, domain_offset, domain_orientation, domain_material,
                       domain_volumes, domain_shells, plane_strain, plane_stress, axisymmetry, save_iteration_results,
                       i, reference_points, shells_as_composite, optimization_base, displacement_graph,
                       domain_FI_filled)
    # running CalculiX analysis
    subprocess.call([os.path.normpath(path_calculix), file_nameW], cwd=path)

    # reading results and computing failure indeces
    if (reference_points == "integration points") or (optimization_base == "stiffness") or \
            (optimization_base == "buckling") or (optimization_base == "heat"):  # from .dat file
        [FI_step, energy_density_step, disp_i, buckling_factors, energy_density_eigen, heat_flux] = \
            beso_lib.import_FI_int_pt(reference_value, file_nameW, domains, criteria, domain_FI, file_name, elm_states,
                                      domains_from_config, steps_superposition, displacement_graph)
    if reference_points == "nodes":  # from .frd file
        FI_step = beso_lib.import_FI_node(reference_value, file_nameW, domains, criteria, domain_FI, file_name,
                                          elm_states, steps_superposition)
        disp_i = beso_lib.import_displacement(file_nameW, displacement_graph, steps_superposition)
    disp_max.append(disp_i)
    if (not FI_step and domain_FI_filled) and (not energy_density_step) and (not buckling_factors):
        msg = "CalculiX results not found, check CalculiX for errors."
        beso_lib.write_to_log(file_name, "\nERROR: " + msg + "\n")
        assert False, msg

    if domain_FI_filled:
        FI_max.append({})
        for dn in domains_from_config:
            FI_max[i][dn] = 0
            for en in domains[dn]:
Esempio n. 2
0
oscillations = False

while True:
    # creating the new .inp file for CalculiX
    file_nameW = os.path.join(path, "file" + str(i).zfill(3))
    beso_lib.write_inp(file_name, file_nameW, elm_states, number_of_states, domains, domains_from_config,
                       domain_optimized, domain_thickness, domain_offset, domain_orientation, domain_material,
                       domain_volumes, domain_shells, plane_strain, plane_stress, axisymmetry, save_iteration_results,
                       i, reference_points, shells_as_composite, optimization_base, displacement_graph)
    # running CalculiX analysis
    subprocess.call(os.path.normpath(path_calculix) + " " + file_nameW, shell=True, cwd=path)

    # reading results and computing failure indeces
    if reference_points == "integration points":  # from .dat file
        [FI_step, energy_density_step, disp_i] = beso_lib.import_FI_int_pt(reference_value, file_nameW, domains,
                                                                             criteria, domain_FI, file_name, elm_states,
                                                                             domains_from_config, steps_superposition,
                                                                             displacement_graph)
    elif reference_points == "nodes":  # from .frd file
        FI_step = beso_lib.import_FI_node(reference_value, file_nameW, domains, criteria, domain_FI, file_name,
                                          elm_states, steps_superposition)
        disp_i = beso_lib.import_displacement(file_nameW, displacement_graph, steps_superposition)
    disp_max.append(disp_i)
    if not FI_step:
        msg = "CalculiX results not found, check CalculiX for errors."
        beso_lib.write_to_log(file_name, "\nERROR: " + msg + "\n")
        assert False, msg

    FI_max.append({})
    for dn in domains_from_config:
        FI_max[i][dn] = 0
        for en in domains[dn]:
Esempio n. 3
0
    def FEA(self):
        global i, FI_step, sensitivity_number, FI_violated, FI_step_max

        print("FEA")
        # creating a new .inp file for CalculiX
        file_nameW = path_export + '/' + str(i).zfill(3)
        beso_lib.write_inp(file_name, file_nameW, elm_states, number_of_states,
                           domains, domains_from_config, domain_optimized,
                           domain_thickness, domain_offset, domain_material,
                           domain_volumes, domain_shells, plane_strain,
                           plane_stress, axisymmetry, save_iteration_results,
                           i, reference_points, shells_as_composite)
        # running CalculiX analysis
        subprocess.call(os.path.normpath(path_calculix) + " " +
                        os.path.join(path, file_nameW),
                        shell=True)

        # reading results and computing failure indeces
        if reference_points == "integration points":  # from .dat file
            FI_step = beso_lib.import_FI_int_pt(reference_value, file_nameW,
                                                domains, criteria, domain_FI,
                                                file_name, elm_states,
                                                domains_from_config)
        elif reference_points == "nodes":  # from .frd file
            FI_step = beso_lib.import_FI_node(reference_value, file_nameW,
                                              domains, criteria, domain_FI,
                                              file_name, elm_states)
        os.remove(file_nameW + ".inp")
        if not save_iteration_results or np.mod(float(i - 1),
                                                save_iteration_results) != 0:
            os.remove(file_nameW + ".dat")
            os.remove(file_nameW + ".frd")
        os.remove(file_nameW + ".sta")
        os.remove(file_nameW + ".cvg")
        FI_max.append({})
        for dn in domains_from_config:
            FI_max[i][dn] = 0
            for en in domains[dn]:
                for sn in range(len(FI_step)):
                    try:
                        FI_step_en = list(
                            filter(lambda a: a is not None,
                                   FI_step[sn][en]))  # drop None FI
                        FI_max[i][dn] = max(FI_max[i][dn], max(FI_step_en))
                    except ValueError:
                        msg = "FI_max computing failed. Check if each domain contains at least one failure criterion."
                        beso_lib.write_to_log(file_name,
                                              "ERROR: " + msg + "\n")
                        raise Exception(msg)
                    except KeyError:
                        msg = "Some result values are missing. Check available disk space."
                        beso_lib.write_to_log(file_name,
                                              "ERROR: " + msg + "\n")
                        raise Exception(msg)
        print("domain ordered \nFI_max and number of violated elements")

        # handling with more steps
        FI_step_max = {
        }  # maximal FI over all steps for each element in this iteration
        FI_violated.append([])
        dno = 0
        for dn in domains_from_config:
            FI_violated[i].append(0)
            for en in domains[dn]:
                FI_step_max[en] = 0
                for sn in range(len(FI_step)):
                    FI_step_en = list(
                        filter(lambda a: a is not None,
                               FI_step[sn][en]))  # drop None FI
                    FI_step_max[en] = max(FI_step_max[en], max(FI_step_en))
                sensitivity_number[en] = FI_step_max[en] / domain_density[dn][
                    elm_states[en]]
                if FI_step_max[en] >= 1:
                    FI_violated[i][dno] += 1
            print(
                str(FI_max[i][dn]).rjust(15) + " " +
                str(FI_violated[i][dno]).rjust(4))
            dno += 1
Esempio n. 4
0
    file_nameW = temp_path + str(i).zfill(3)
    beso_lib.write_inp(file_name, file_nameW, elm_states, number_of_states,
                       domains, domains_from_config, domain_optimized,
                       domain_thickness, domain_offset, domain_material,
                       domain_volumes, domain_shells, plane_strain,
                       plane_stress, axisymmetry, save_iteration_results, i,
                       reference_points, shells_as_composite)
    # running CalculiX analysis
    subprocess.call(os.path.normpath(path_calculix) + " " +
                    os.path.join(path, file_nameW),
                    shell=True)

    # reading results and computing failure indeces
    if reference_points == "integration points":  # from .dat file
        FI_step = beso_lib.import_FI_int_pt(reference_value, file_nameW,
                                            domains, criteria, domain_FI,
                                            file_name, elm_states,
                                            domains_from_config)
    elif reference_points == "nodes":  # from .frd file
        FI_step = beso_lib.import_FI_node(reference_value, file_nameW, domains,
                                          criteria, domain_FI, file_name,
                                          elm_states)
    os.remove(file_nameW + ".inp")
    if not save_iteration_results or np.mod(float(i - 1),
                                            save_iteration_results) != 0:
        os.remove(file_nameW + ".dat")
        os.remove(file_nameW + ".frd")
    os.remove(file_nameW + ".sta")
    os.remove(file_nameW + ".cvg")
    FI_max.append({})
    for dn in domains_from_config:
        FI_max[i][dn] = 0
Esempio n. 5
0
    beso_lib.write_inp(file_name, file_nameW, elm_states, number_of_states,
                       domains, domains_from_config, domain_optimized,
                       domain_thickness, domain_offset, domain_orientation,
                       domain_material, domain_volumes, domain_shells,
                       plane_strain, plane_stress, axisymmetry,
                       save_iteration_results, i, reference_points,
                       shells_as_composite, optimization_base)
    # running CalculiX analysis
    subprocess.call(os.path.normpath(path_calculix) + " " +
                    os.path.join(path, file_nameW),
                    shell=True)

    # reading results and computing failure indeces
    if reference_points == "integration points":  # from .dat file
        [FI_step, energy_density_step] = beso_lib.import_FI_int_pt(
            reference_value, file_nameW, domains, criteria, domain_FI,
            file_name, elm_states, domains_from_config, steps_superposition)
    elif reference_points == "nodes":  # from .frd file
        FI_step = beso_lib.import_FI_node(reference_value, file_nameW, domains,
                                          criteria, domain_FI, file_name,
                                          elm_states, steps_superposition)
    if not FI_step:
        msg = "CalculiX results not found, check CalculiX for errors."
        beso_lib.write_to_log(file_name, "\nERROR: " + msg + "\n")
        assert False, msg

    FI_max.append({})
    for dn in domains_from_config:
        FI_max[i][dn] = 0
        for en in domains[dn]:
            for sn in range(len(FI_step)):